@smoothbricks/cli 0.10.3 → 0.10.4

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 (111) hide show
  1. package/README.md +9 -13
  2. package/dist/bun/preload.d.ts +13 -0
  3. package/dist/bun/preload.d.ts.map +1 -0
  4. package/dist/bun/preload.js +12 -0
  5. package/dist/cli.js +12 -4
  6. package/dist/generate/index.d.ts.map +1 -1
  7. package/dist/generate/index.js +0 -6
  8. package/dist/github-ci/index.d.ts.map +1 -1
  9. package/dist/github-ci/index.js +52 -16
  10. package/dist/github-ci/outputs.d.ts.map +1 -1
  11. package/dist/github-ci/outputs.js +1 -2
  12. package/dist/lib/cli-package.js +2 -2
  13. package/dist/lib/json.d.ts +118 -11
  14. package/dist/lib/json.d.ts.map +1 -1
  15. package/dist/lib/json.js +317 -29
  16. package/dist/lib/workspace.d.ts +7 -14
  17. package/dist/lib/workspace.d.ts.map +1 -1
  18. package/dist/lib/workspace.js +76 -82
  19. package/dist/monorepo/ci-workflow.d.ts +2 -0
  20. package/dist/monorepo/ci-workflow.d.ts.map +1 -1
  21. package/dist/monorepo/ci-workflow.js +27 -1
  22. package/dist/monorepo/git-config.js +2 -2
  23. package/dist/monorepo/index.d.ts +3 -1
  24. package/dist/monorepo/index.d.ts.map +1 -1
  25. package/dist/monorepo/index.js +6 -2
  26. package/dist/monorepo/lockfile.d.ts +13 -1
  27. package/dist/monorepo/lockfile.d.ts.map +1 -1
  28. package/dist/monorepo/lockfile.js +33 -21
  29. package/dist/monorepo/managed-files.d.ts +11 -0
  30. package/dist/monorepo/managed-files.d.ts.map +1 -1
  31. package/dist/monorepo/managed-files.js +52 -32
  32. package/dist/monorepo/package-policy.d.ts.map +1 -1
  33. package/dist/monorepo/package-policy.js +52 -45
  34. package/dist/monorepo/packed-manifest.d.ts +5 -2
  35. package/dist/monorepo/packed-manifest.d.ts.map +1 -1
  36. package/dist/monorepo/packed-manifest.js +16 -47
  37. package/dist/monorepo/packed-package.d.ts.map +1 -1
  38. package/dist/monorepo/packed-package.js +28 -16
  39. package/dist/monorepo/packs/index.d.ts.map +1 -1
  40. package/dist/monorepo/packs/index.js +13 -4
  41. package/dist/monorepo/publish-workflow.js +3 -1
  42. package/dist/monorepo/runtime.d.ts +15 -0
  43. package/dist/monorepo/runtime.d.ts.map +1 -1
  44. package/dist/monorepo/runtime.js +66 -12
  45. package/dist/monorepo/tool-validation.d.ts.map +1 -1
  46. package/dist/monorepo/tool-validation.js +32 -23
  47. package/dist/monorepo/wrangler.d.ts.map +1 -1
  48. package/dist/monorepo/wrangler.js +13 -13
  49. package/dist/nx/index.d.ts +9 -7
  50. package/dist/nx/index.d.ts.map +1 -1
  51. package/dist/nx/index.js +48 -31
  52. package/dist/pr/index.d.ts.map +1 -1
  53. package/dist/pr/index.js +28 -32
  54. package/dist/release/candidates.d.ts +3 -2
  55. package/dist/release/candidates.d.ts.map +1 -1
  56. package/dist/release/candidates.js +4 -5
  57. package/dist/release/index.d.ts +1 -0
  58. package/dist/release/index.d.ts.map +1 -1
  59. package/dist/release/index.js +82 -59
  60. package/dist/wrangler/prepare-env.d.ts +0 -1
  61. package/dist/wrangler/prepare-env.d.ts.map +1 -1
  62. package/dist/wrangler/prepare-env.js +100 -51
  63. package/dist/wrangler/scaffold.d.ts.map +1 -1
  64. package/dist/wrangler/scaffold.js +12 -12
  65. package/managed/raw/git-format-staged.yml +19 -1
  66. package/managed/raw/tooling/direnv/github-actions-bootstrap.sh +2 -1
  67. package/managed/raw/tooling/direnv/merge-newer-pins.sh +3 -3
  68. package/managed/raw/tooling/direnv/setup-environment.ts +150 -19
  69. package/managed/raw/tooling/git-hooks/pre-commit.sh +0 -6
  70. package/managed/templates/github/actions/cache-node-modules/action.yml +5 -2
  71. package/managed/templates/github/actions/cache-ttsc-plugins/action.yml +19 -0
  72. package/managed/templates/github/actions/setup-devenv/action.yml +5 -0
  73. package/managed/templates/github/workflows/managed-files.yml +80 -0
  74. package/package.json +15 -4
  75. package/src/bun/preload.ts +12 -0
  76. package/src/cli.ts +19 -7
  77. package/src/generate/index.ts +0 -6
  78. package/src/github-ci/index.ts +49 -18
  79. package/src/github-ci/outputs.ts +1 -2
  80. package/src/lib/cli-package.ts +2 -2
  81. package/src/lib/json.ts +291 -32
  82. package/src/lib/workspace.ts +88 -100
  83. package/src/monorepo/__tests__/ci-workflow.test.ts +3 -3
  84. package/src/monorepo/ci-workflow.ts +27 -1
  85. package/src/monorepo/git-config.ts +2 -2
  86. package/src/monorepo/index.ts +6 -2
  87. package/src/monorepo/lockfile.test.ts +35 -36
  88. package/src/monorepo/lockfile.ts +48 -24
  89. package/src/monorepo/managed-files.test.ts +1 -0
  90. package/src/monorepo/managed-files.ts +57 -38
  91. package/src/monorepo/package-policy.test.ts +20 -50
  92. package/src/monorepo/package-policy.ts +76 -59
  93. package/src/monorepo/packed-manifest.ts +18 -52
  94. package/src/monorepo/packed-package.ts +43 -22
  95. package/src/monorepo/packs/index.ts +13 -4
  96. package/src/monorepo/publish-workflow.ts +3 -1
  97. package/src/monorepo/runtime.test.ts +42 -3
  98. package/src/monorepo/runtime.ts +90 -12
  99. package/src/monorepo/tool-validation.ts +35 -25
  100. package/src/monorepo/wrangler.test.ts +11 -15
  101. package/src/monorepo/wrangler.ts +15 -15
  102. package/src/nx/index.test.ts +9 -5
  103. package/src/nx/index.ts +69 -42
  104. package/src/pr/index.ts +42 -36
  105. package/src/release/__tests__/candidates.test.ts +5 -4
  106. package/src/release/__tests__/trust-publisher.test.ts +7 -0
  107. package/src/release/candidates.ts +10 -17
  108. package/src/release/index.ts +104 -73
  109. package/src/wrangler/prepare-env.ts +75 -54
  110. package/src/wrangler/scaffold.test.ts +9 -12
  111. package/src/wrangler/scaffold.ts +13 -13
@@ -1,7 +1,7 @@
1
1
  import { readdirSync, statSync } from 'node:fs';
2
2
  import { dirname, join, relative } from 'node:path';
3
3
  import { isSmoothBricksCodebasePackageName } from './cli-package.js';
4
- import { hasOwn, hasOwnString, isRecord, readJson, readJsonObject, stringProperty } from './json.js';
4
+ import { isPackageJson, readJson, readJsonObject, } from './json.js';
5
5
  export const workspaceDependencyFields = [
6
6
  'dependencies',
7
7
  'devDependencies',
@@ -12,22 +12,19 @@ export function listPublicPackages(root) {
12
12
  return getWorkspacePackages(root).filter((pkg) => !pkg.private && pkg.tags.includes('npm:public'));
13
13
  }
14
14
  export function listReleasePackages(root, rootPackage = readPackageJson(join(root, 'package.json'))) {
15
- if (!rootPackage) {
16
- return [];
17
- }
18
- const rootRepository = repositoryInfo(rootPackage.json);
15
+ const rootRepository = rootPackage ? repositoryInfo(rootPackage.json) : null;
19
16
  if (!rootRepository) {
20
17
  return [];
21
18
  }
22
- return getWorkspacePackagesForPatterns(root, getWorkspacePatternsFromPackageJson(rootPackage.json)).filter((pkg) => !pkg.private && pkg.tags.includes('npm:public') && isOwnedPackage(rootRepository, pkg));
19
+ return listPublicPackages(root).filter((pkg) => isOwnedPackage(rootRepository, pkg));
23
20
  }
24
21
  export function rootRepositoryInfo(root) {
25
- const rootPackage = readJsonObject(join(root, 'package.json'));
26
- return rootPackage ? repositoryInfo(rootPackage) : null;
22
+ const rootPackage = readPackageJson(join(root, 'package.json'));
23
+ return rootPackage ? repositoryInfo(rootPackage.json) : null;
27
24
  }
28
25
  export function rootPackageName(root) {
29
26
  const rootPackage = readPackageJsonObject(join(root, 'package.json'));
30
- return rootPackage ? stringProperty(rootPackage, 'name') : null;
27
+ return rootPackage?.name ?? null;
31
28
  }
32
29
  export function isSmoothBricksCodebase(root) {
33
30
  return isSmoothBricksCodebasePackageName(rootPackageName(root) ?? undefined);
@@ -40,62 +37,63 @@ export function isOwnedPackage(rootRepository, pkg) {
40
37
  return packageRepository !== null && packageRepository.url === rootRepository.url;
41
38
  }
42
39
  export function getWorkspacePackages(root) {
43
- const rootPackage = readPackageJson(join(root, 'package.json'));
44
- if (!rootPackage) {
45
- throw new Error('package.json not found or invalid');
46
- }
47
- return getWorkspacePackagesForPatterns(root, getWorkspacePatternsFromPackageJson(rootPackage.json));
40
+ return getWorkspacePackagesForPatterns(root, getWorkspacePatterns(root));
48
41
  }
49
42
  export function getWorkspacePackageManifests(root) {
50
- const rootPackage = readPackageJsonObject(join(root, 'package.json'));
51
- if (!rootPackage) {
52
- throw new Error('package.json not found or invalid');
53
- }
54
- return getWorkspacePackageManifestsForPatterns(root, getWorkspacePatternsFromPackageJson(rootPackage));
43
+ return getWorkspacePackageManifestsForPatterns(root, getWorkspacePatterns(root));
55
44
  }
56
45
  function getWorkspacePackagesForPatterns(root, workspacePatterns) {
57
46
  const packages = [];
58
- for (const pkgPath of listWorkspacePackageJsonPaths(root, workspacePatterns)) {
59
- const pkg = readPackageJson(pkgPath);
60
- if (!pkg?.name || !pkg.version) {
47
+ for (const path of listWorkspacePackageJsonPaths(root, workspacePatterns)) {
48
+ const pkg = readPackageJson(path);
49
+ if (!pkg) {
61
50
  continue;
62
51
  }
63
52
  packages.push({
64
- name: pkg.name,
65
- projectName: pkg.projectName,
66
- version: pkg.version,
67
- private: pkg.private,
68
- tags: pkg.tags,
69
- path: relative(root, dirname(pkgPath)),
70
- packageJsonPath: pkg.packageJsonPath,
71
- json: pkg.json,
53
+ ...pkg,
54
+ path: relative(root, dirname(path)),
72
55
  });
73
56
  }
74
57
  return packages.sort((a, b) => a.name.localeCompare(b.name));
75
58
  }
76
59
  function getWorkspacePackageManifestsForPatterns(root, workspacePatterns) {
77
- const manifests = [];
78
- for (const pkgPath of listWorkspacePackageJsonPaths(root, workspacePatterns)) {
79
- const pkg = readWorkspacePackageManifest(pkgPath);
80
- if (pkg) {
81
- manifests.push(pkg);
60
+ const packages = [];
61
+ for (const path of listWorkspacePackageJsonPaths(root, workspacePatterns)) {
62
+ const pkg = readWorkspacePackageManifest(path);
63
+ if (!pkg) {
64
+ continue;
82
65
  }
66
+ packages.push({
67
+ ...pkg,
68
+ path: relative(root, dirname(path)),
69
+ });
83
70
  }
84
- return manifests.sort((a, b) => a.name.localeCompare(b.name));
71
+ return packages.sort((a, b) => a.name.localeCompare(b.name));
85
72
  }
86
73
  function listWorkspacePackageJsonPaths(root, workspacePatterns) {
87
74
  const paths = [];
88
75
  for (const pattern of workspacePatterns) {
89
76
  if (!pattern.endsWith('/*')) {
90
- paths.push(join(root, pattern, 'package.json'));
91
77
  continue;
92
78
  }
93
79
  const parent = join(root, pattern.slice(0, -2));
94
- if (!statSync(parent, { throwIfNoEntry: false })?.isDirectory()) {
80
+ let entries;
81
+ try {
82
+ entries = readdirSync(parent);
83
+ }
84
+ catch {
95
85
  continue;
96
86
  }
97
- for (const entry of readdirSync(parent)) {
98
- paths.push(join(parent, entry, 'package.json'));
87
+ for (const entry of entries) {
88
+ const packageJsonPath = join(parent, entry, 'package.json');
89
+ try {
90
+ if (statSync(packageJsonPath).isFile()) {
91
+ paths.push(packageJsonPath);
92
+ }
93
+ }
94
+ catch {
95
+ // skip missing package.json
96
+ }
99
97
  }
100
98
  }
101
99
  return paths;
@@ -103,7 +101,7 @@ function listWorkspacePackageJsonPaths(root, workspacePatterns) {
103
101
  export function listPackageJsonRecords(root) {
104
102
  const rootPackage = readPackageJson(join(root, 'package.json'));
105
103
  if (!rootPackage) {
106
- throw new Error('package.json not found or invalid');
104
+ return getWorkspacePackages(root);
107
105
  }
108
106
  return [
109
107
  { ...rootPackage, path: '.' },
@@ -112,34 +110,30 @@ export function listPackageJsonRecords(root) {
112
110
  }
113
111
  export function getWorkspacePatterns(root) {
114
112
  const raw = readJson(join(root, 'package.json'));
115
- return isRecord(raw) ? getWorkspacePatternsFromPackageJson(raw) : ['packages/*'];
113
+ const pkg = isPackageJson(raw) ? raw : null;
114
+ return pkg ? getWorkspacePatternsFromPackageJson(pkg) : ['packages/*'];
116
115
  }
117
116
  function getWorkspacePatternsFromPackageJson(pkg) {
118
- if (!hasOwn(pkg, 'workspaces')) {
119
- return ['packages/*'];
120
- }
121
117
  const workspaces = pkg.workspaces;
122
118
  if (Array.isArray(workspaces)) {
123
119
  return workspaces.filter((entry) => typeof entry === 'string');
124
120
  }
125
- if (isRecord(workspaces) && hasOwn(workspaces, 'packages') && Array.isArray(workspaces.packages)) {
121
+ if (workspaces && typeof workspaces === 'object' && Array.isArray(workspaces.packages)) {
126
122
  return workspaces.packages.filter((entry) => typeof entry === 'string');
127
123
  }
128
124
  return ['packages/*'];
129
125
  }
130
126
  export function readPackageJson(path) {
131
127
  const parsed = readPackageJsonObject(path);
132
- if (!isRecord(parsed) || !hasOwnString(parsed, 'name') || !hasOwnString(parsed, 'version')) {
128
+ if (!parsed?.name || !parsed.version) {
133
129
  return null;
134
130
  }
135
- const privateValue = hasOwn(parsed, 'private') && typeof parsed.private === 'boolean' ? parsed.private : false;
136
- const tags = getNxTags(parsed);
137
131
  return {
138
132
  name: parsed.name,
139
133
  projectName: packageNxProjectName(parsed),
140
134
  version: parsed.version,
141
- private: privateValue,
142
- tags,
135
+ private: parsed.private === true,
136
+ tags: getNxTags(parsed),
143
137
  path: dirname(path),
144
138
  packageJsonPath: path,
145
139
  json: parsed,
@@ -147,70 +141,70 @@ export function readPackageJson(path) {
147
141
  }
148
142
  export function readWorkspacePackageManifest(path) {
149
143
  const parsed = readPackageJsonObject(path);
150
- if (!isRecord(parsed) || !hasOwnString(parsed, 'name')) {
144
+ if (!parsed?.name) {
151
145
  return null;
152
146
  }
153
- const privateValue = hasOwn(parsed, 'private') && typeof parsed.private === 'boolean' ? parsed.private : false;
154
147
  return {
155
148
  name: parsed.name,
156
149
  projectName: packageNxProjectName(parsed),
157
- private: privateValue,
150
+ private: parsed.private === true,
158
151
  path: dirname(path),
159
152
  packageJsonPath: path,
160
153
  json: parsed,
161
154
  };
162
155
  }
163
156
  function packageNxProjectName(pkg) {
164
- const nx = isRecord(pkg.nx) ? pkg.nx : null;
165
- return (nx ? stringProperty(nx, 'name') : null) ?? stringProperty(pkg, 'name') ?? '';
157
+ return pkg.nx?.name ?? pkg.name ?? '';
166
158
  }
167
159
  export function readPackageJsonObject(path) {
168
- const parsed = readJsonObject(path);
169
- return parsed;
160
+ return readJsonObject(path);
170
161
  }
171
162
  export function getNxTags(pkg) {
172
- if (!hasOwn(pkg, 'nx') || !isRecord(pkg.nx) || !hasOwn(pkg.nx, 'tags') || !Array.isArray(pkg.nx.tags)) {
163
+ const tags = pkg.nx?.tags;
164
+ if (!Array.isArray(tags)) {
173
165
  return [];
174
166
  }
175
- return pkg.nx.tags.filter((tag) => typeof tag === 'string');
167
+ return tags.filter((tag) => typeof tag === 'string');
176
168
  }
177
169
  export function repositoryInfo(pkg) {
178
170
  const repository = pkg.repository;
179
171
  if (typeof repository === 'string') {
180
172
  return { type: 'git', url: repository };
181
173
  }
182
- if (!isRecord(repository)) {
174
+ if (!repository || typeof repository !== 'object') {
183
175
  return null;
184
176
  }
185
- const url = stringProperty(repository, 'url');
177
+ const url = repository.url;
186
178
  if (!url) {
187
179
  return null;
188
180
  }
189
- return { type: stringProperty(repository, 'type') ?? 'git', url };
181
+ return { type: repository.type ?? 'git', url };
190
182
  }
191
183
  export function sameRepositoryAfterNormalization(left, right) {
192
184
  return normalizedRepositoryUrl(left) === normalizedRepositoryUrl(right);
193
185
  }
194
186
  function normalizedRepositoryUrl(url) {
195
- const trimmed = url
196
- .trim()
197
- .replace(/^git\+/, '')
198
- .replace(/#.*$/, '')
199
- .replace(/\/$/, '')
200
- .replace(/\.git$/, '');
201
- const https = /^https:\/\/github\.com\/([^/]+)\/([^/]+)$/i.exec(trimmed);
202
- if (https?.[1] && https[2]) {
203
- return githubRepositoryKey(https[1], https[2]);
204
- }
205
- const ssh = /^git@github\.com:([^/]+)\/([^/]+)$/i.exec(trimmed);
206
- if (ssh?.[1] && ssh[2]) {
207
- return githubRepositoryKey(ssh[1], ssh[2]);
208
- }
209
- const shorthand = /^github:([^/]+)\/([^/]+)$/i.exec(trimmed);
210
- if (shorthand?.[1] && shorthand[2]) {
211
- return githubRepositoryKey(shorthand[1], shorthand[2]);
212
- }
213
- return trimmed;
187
+ const trimmed = url.trim().replace(/\.git$/i, '');
188
+ const ssh = /^git@github\.com:(.+)$/i.exec(trimmed);
189
+ if (ssh?.[1]) {
190
+ const [owner, repo] = ssh[1].split('/');
191
+ if (owner && repo) {
192
+ return githubRepositoryKey(owner, repo);
193
+ }
194
+ }
195
+ try {
196
+ const parsed = new URL(trimmed.includes('://') ? trimmed : `https://${trimmed}`);
197
+ if (parsed.hostname.replace(/^www\./i, '').toLowerCase() === 'github.com') {
198
+ const [owner, repo] = parsed.pathname.replace(/^\//, '').split('/');
199
+ if (owner && repo) {
200
+ return githubRepositoryKey(owner, repo);
201
+ }
202
+ }
203
+ }
204
+ catch {
205
+ // fall through
206
+ }
207
+ return trimmed.toLowerCase();
214
208
  }
215
209
  function githubRepositoryKey(owner, repo) {
216
210
  return `github:${owner.toLowerCase()}/${repo.toLowerCase()}`;
@@ -6,6 +6,8 @@ export declare enum CiWorkflowStepKind {
6
6
  Build = "build",
7
7
  Lint = "lint",
8
8
  UnitTests = "unit-tests",
9
+ ManagedFilesCheck = "managed-files-check",
10
+ ManagedFilesDispatch = "managed-files-dispatch",
9
11
  Deploy = "deploy",
10
12
  SaveNxCache = "save-nx-cache",
11
13
  UploadTraceDbs = "upload-trace-dbs",
@@ -1 +1 @@
1
- {"version":3,"file":"ci-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/ci-workflow.ts"],"names":[],"mappings":"AAEA,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,WAAW,iBAAiB;IAC5B,SAAS,gBAAgB;IACzB,cAAc,qBAAqB;IACnC,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,MAAM,WAAW;IACjB,WAAW,kBAAkB;IAC7B,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,EAAE,CAmBvF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAGjF"}
1
+ {"version":3,"file":"ci-workflow.d.ts","sourceRoot":"","sources":["../../src/monorepo/ci-workflow.ts"],"names":[],"mappings":"AAEA,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,WAAW,iBAAiB;IAC5B,SAAS,gBAAgB;IACzB,cAAc,qBAAqB;IACnC,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,iBAAiB,wBAAwB;IACzC,oBAAoB,2BAA2B;IAC/C,MAAM,WAAW;IACjB,WAAW,kBAAkB;IAC7B,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,EAAE,CAqBvF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAGjF"}
@@ -8,6 +8,8 @@ export var CiWorkflowStepKind;
8
8
  CiWorkflowStepKind["Build"] = "build";
9
9
  CiWorkflowStepKind["Lint"] = "lint";
10
10
  CiWorkflowStepKind["UnitTests"] = "unit-tests";
11
+ CiWorkflowStepKind["ManagedFilesCheck"] = "managed-files-check";
12
+ CiWorkflowStepKind["ManagedFilesDispatch"] = "managed-files-dispatch";
11
13
  CiWorkflowStepKind["Deploy"] = "deploy";
12
14
  CiWorkflowStepKind["SaveNxCache"] = "save-nx-cache";
13
15
  CiWorkflowStepKind["UploadTraceDbs"] = "upload-trace-dbs";
@@ -22,6 +24,8 @@ export function defineCiWorkflow(options) {
22
24
  { kind: CiWorkflowStepKind.Build, name: '🔨 Build' },
23
25
  { kind: CiWorkflowStepKind.Lint, name: '🔍 Lint' },
24
26
  { kind: CiWorkflowStepKind.UnitTests, name: '🧪 Unit Tests' },
27
+ { kind: CiWorkflowStepKind.ManagedFilesCheck, name: '🩺 Check managed-file drift' },
28
+ { kind: CiWorkflowStepKind.ManagedFilesDispatch, name: '🔁 Dispatch managed-file drift healing' },
25
29
  ];
26
30
  if (options.deploy) {
27
31
  steps.push({ kind: CiWorkflowStepKind.Deploy, name: '🚀 Deploy Staging' });
@@ -43,7 +47,8 @@ ${renderYamlList(options.pushBranches, 6)}
43
47
  pull_request:
44
48
 
45
49
  permissions:
46
- actions: read
50
+ # actions:write lets the drift step dispatch the managed-files workflow.
51
+ actions: write
47
52
  contents: read
48
53
  statuses: write
49
54
 
@@ -135,6 +140,27 @@ function yamlLinesForStep(step, options) {
135
140
  return nxSmartStep(step, 'lint', 'Lint');
136
141
  case CiWorkflowStepKind.UnitTests:
137
142
  return nxSmartStep(step, 'test', 'Unit Tests');
143
+ case CiWorkflowStepKind.ManagedFilesCheck:
144
+ // The authoritative drift check is nearly free here (devenv is already
145
+ // up). --warn never fails the job and publishes the step output
146
+ // `drifted=<count>` for the dispatch step below.
147
+ return [
148
+ ` - name: ${step.name}`,
149
+ ' id: managed-drift',
150
+ ' if:',
151
+ " ${{ github.event_name == 'push' && github.ref == format('refs/heads/{0}',",
152
+ ' github.event.repository.default_branch) }}',
153
+ ' run: smoo monorepo check --warn',
154
+ ];
155
+ case CiWorkflowStepKind.ManagedFilesDispatch:
156
+ // Dispatches the managed-files workflow, which maintains the persistent
157
+ // review PR. workflow_dispatch is exempt from GitHub's GITHUB_TOKEN
158
+ // recursion guard, so the default token suffices.
159
+ return [
160
+ ` - name: ${step.name}`,
161
+ " if: ${{ steps.managed-drift.outputs.drifted != '' && steps.managed-drift.outputs.drifted != '0' }}",
162
+ ' run: gh workflow run managed-files.yml --ref "$GITHUB_REF_NAME"',
163
+ ];
138
164
  case CiWorkflowStepKind.Deploy:
139
165
  return [
140
166
  ` - name: ${step.name}`,
@@ -13,8 +13,8 @@ export async function applyWorkspaceGitConfig(root) {
13
13
  // Keep the newer runtime version pins on any merge (nvfetcher overlay +
14
14
  // devenv.lock) so a mirror sync's `git am --3way` never stalls on a version
15
15
  // conflict. Mapped by the managed .gitattributes (merge=smoo-newer-pins);
16
- // implemented in tooling/direnv/merge-newer-pins.sh. The next `devenv shell`
17
- // regenerates package.json fields from the resulting runtime.
16
+ // implemented in tooling/direnv/merge-newer-pins.sh. Runtime package.json
17
+ // pin repair is explicit via `smoo monorepo init --runtime-only`.
18
18
  await $ `git config --local merge.smoo-newer-pins.name ${'keep the newer devenv/nvfetcher runtime pins'}`.cwd(root);
19
19
  await $ `git config --local merge.smoo-newer-pins.driver ${'bash tooling/direnv/merge-newer-pins.sh %O %A %B %P'}`.cwd(root);
20
20
  linkHook(gitDir, tooling, 'pre-commit');
@@ -31,7 +31,9 @@ export interface SetupTestTracingShell {
31
31
  export declare function initMonorepo(root: string, options: InitOptions): Promise<void>;
32
32
  export declare function validateMonorepo(root: string, options?: ValidateOptions): Promise<void>;
33
33
  export declare function updateManagedFiles(root: string): void;
34
- export declare function checkManagedFiles(root: string): void;
34
+ export declare function checkManagedFiles(root: string, options?: {
35
+ warn?: boolean;
36
+ }): void;
35
37
  export declare function diffManagedFiles(root: string): void;
36
38
  export declare function validateCommitMessageFile(path: string | undefined, options?: ValidateCommitMessageOptions, root?: string): void;
37
39
  export declare function listReleaseProjectNamesForNx(root: string, options?: ListReleasePackagesOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monorepo/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAMxD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,4BAAiC,EAC1C,IAAI,SAAgB,GACnB,IAAI,CAgBN;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,MAAM,CAW3G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,KAAK,GAAE,qBAAoD,GAC1D,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/monorepo/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAMxD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjG;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAUtF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,4BAAiC,EAC1C,IAAI,SAAgB,GACnB,IAAI,CAgBN;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,0BAA+B,GAAG,MAAM,CAW3G;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,KAAK,GAAE,qBAAoD,GAC1D,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,CAAC"}
@@ -5,7 +5,7 @@ import { escapeRegex, getWorkspacePackages, getWorkspacePatterns, listReleasePac
5
5
  import { formatCommitMessage, validateCommitMessage } from './commit-msg.js';
6
6
  import { applyWorkspaceGitConfig } from './git-config.js';
7
7
  import { syncBunLockfileVersions } from './lockfile.js';
8
- import { applyManagedFiles, printResults } from './managed-files.js';
8
+ import { applyManagedFiles, printResults, warnOnManagedFileDrift } from './managed-files.js';
9
9
  import { listValidCommitScopes, validatePublicTags } from './package-policy.js';
10
10
  import { runInitPacks, runValidatePacks } from './packs/index.js';
11
11
  import { syncRootRuntimeVersions } from './runtime.js';
@@ -38,7 +38,11 @@ export async function validateMonorepo(root, options = {}) {
38
38
  export function updateManagedFiles(root) {
39
39
  printResults(applyManagedFiles(root, 'update'));
40
40
  }
41
- export function checkManagedFiles(root) {
41
+ export function checkManagedFiles(root, options = {}) {
42
+ if (options.warn === true) {
43
+ warnOnManagedFileDrift(root);
44
+ return;
45
+ }
42
46
  const results = applyManagedFiles(root, 'check');
43
47
  printResults(results);
44
48
  if (results.some((result) => result.action === 'drifted')) {
@@ -1,8 +1,20 @@
1
1
  export interface SyncBunLockfileVersionsOptions {
2
2
  log?: boolean;
3
- /** `git add` bun.lock after rewriting it, for the pre-commit self-heal path. */
3
+ /** `git add` bun.lock when versions were resynced. */
4
4
  stage?: boolean;
5
+ /**
6
+ * `install` (default for validation): lockfile must match package.json.
7
+ * `publish`: rewrite unpublished prerelease package.json versions to the last
8
+ * stable git tag so `bun pm pack` embeds installable dependency versions.
9
+ */
10
+ mode?: 'install' | 'publish';
5
11
  }
6
12
  export declare function syncBunLockfileVersions(root: string, options?: SyncBunLockfileVersionsOptions): number;
13
+ /** Install/CI invariant: bun.lock workspace versions match package.json. */
7
14
  export declare function validateBunLockfileVersions(root: string): number;
15
+ /**
16
+ * Version Bun should embed for a workspace dependency when packing for publish.
17
+ * Unpublished package.json prereleases (prepare-next) map to the last stable tag.
18
+ */
19
+ export declare function publishPackDependencyVersion(root: string, projectName: string, packageVersion: string): string;
8
20
  //# sourceMappingURL=lockfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/monorepo/lockfile.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAiBD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,8BAAmC,GAAG,MAAM,CAuD1G;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiChE"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/monorepo/lockfile.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sDAAsD;IACtD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,8BAAmC,GAAG,MAAM,CAqD1G;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8BhE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9G"}
@@ -2,23 +2,26 @@ import { execSync } from 'node:child_process';
2
2
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { escapeRegex, getWorkspacePackages } from '../lib/workspace.js';
5
- // Temporary Bun workaround. Delete this sync function, validateBunLockfileVersions,
6
- // the `smoo monorepo sync-bun-lockfile-versions` command, and the matching Nx
7
- // versionActions hook once supported Bun versions stop leaving workspace package
8
- // versions stale in bun.lock after manifest bumps. Until then, `bun pm pack`
9
- // rewrites `workspace:*` dependencies using those stale lockfile versions instead
10
- // of the current package.json versions. Track removal against:
5
+ // Temporary Bun workaround. Delete once supported Bun versions stop leaving
6
+ // workspace package versions stale in bun.lock after manifest bumps, and stop
7
+ // resolving `workspace:*` from the lockfile during `bun pm pack`:
11
8
  // - https://github.com/oven-sh/bun/issues/18906
12
9
  // - https://github.com/oven-sh/bun/issues/20477
13
10
  // - https://github.com/oven-sh/bun/issues/20829
14
11
  //
15
- // Any `bun install` rewrites the workspace versions from package.json, reverting
16
- // this sync between releases. The pre-commit hook therefore runs
17
- // `smoo monorepo sync-bun-lockfile-versions --stage` on every commit so drift is
18
- // healed at the commit that would otherwise carry it — validation must never
19
- // fail a committer for drift a routine `bun install` introduced.
12
+ // Two modes, because one lockfile serves two jobs:
13
+ //
14
+ // 1) install / frozen CI → lockfile package.json (including -next)
15
+ // 2) pre-publish pack → for package.json prereleases that were never published
16
+ // (post-release "prepare next"), lockfile entry := last
17
+ // stable tag so a releasing package does not embed an
18
+ // unpublished -next dependency version.
19
+ //
20
+ // Do not run publish-mode rewrite in day-to-day validate or pre-commit: bun install
21
+ // rewrites lockfile back to package.json and frozen CI then fails.
20
22
  export function syncBunLockfileVersions(root, options = {}) {
21
23
  const log = options.log ?? true;
24
+ const mode = options.mode ?? 'publish';
22
25
  const lockfilePath = join(root, 'bun.lock');
23
26
  if (!existsSync(lockfilePath)) {
24
27
  throw new Error('bun.lock not found');
@@ -27,12 +30,7 @@ export function syncBunLockfileVersions(root, options = {}) {
27
30
  let lockfile = readFileSync(lockfilePath, 'utf8');
28
31
  let updated = 0;
29
32
  for (const pkg of packages) {
30
- // If the package.json version is a prerelease (e.g. 0.2.2-next.0) it may
31
- // never have been published. Use the latest stable git tag version so
32
- // that `bun pm pack` writes an installable dependency range for consumers.
33
- const targetVersion = pkg.version.includes('-')
34
- ? (latestStableTagVersion(root, pkg.projectName) ?? pkg.version)
35
- : pkg.version;
33
+ const targetVersion = lockfileTargetVersion(root, pkg.projectName, pkg.version, mode);
36
34
  const relativePath = pkg.path.replaceAll('\\', '/');
37
35
  const escaped = escapeRegex(relativePath);
38
36
  const pattern = new RegExp(`("${escaped}":\\s*\\{[^}]*"version":\\s*")([^"]+)(")`);
@@ -52,7 +50,9 @@ export function syncBunLockfileVersions(root, options = {}) {
52
50
  }
53
51
  lockfile = lockfile.replace(pattern, `$1${targetVersion}$3`);
54
52
  if (log) {
55
- const suffix = targetVersion !== pkg.version ? ` (latest stable tag; package.json has ${pkg.version})` : '';
53
+ const suffix = mode === 'publish' && targetVersion !== pkg.version
54
+ ? ` (latest stable tag; package.json has ${pkg.version})`
55
+ : '';
56
56
  console.log(`fix: ${relativePath}: ${lockVersion} -> ${targetVersion}${suffix}`);
57
57
  }
58
58
  updated++;
@@ -70,6 +70,7 @@ export function syncBunLockfileVersions(root, options = {}) {
70
70
  }
71
71
  return updated;
72
72
  }
73
+ /** Install/CI invariant: bun.lock workspace versions match package.json. */
73
74
  export function validateBunLockfileVersions(root) {
74
75
  const lockfilePath = join(root, 'bun.lock');
75
76
  if (!existsSync(lockfilePath)) {
@@ -80,9 +81,7 @@ export function validateBunLockfileVersions(root) {
80
81
  const lockfile = readFileSync(lockfilePath, 'utf8');
81
82
  let failures = 0;
82
83
  for (const pkg of packages) {
83
- const targetVersion = pkg.version.includes('-')
84
- ? (latestStableTagVersion(root, pkg.projectName) ?? pkg.version)
85
- : pkg.version;
84
+ const targetVersion = pkg.version;
86
85
  const relativePath = pkg.path.replaceAll('\\', '/');
87
86
  const escaped = escapeRegex(relativePath);
88
87
  const pattern = new RegExp(`("${escaped}":\\s*\\{[^}]*"version":\\s*")([^"]+)(")`);
@@ -103,6 +102,19 @@ export function validateBunLockfileVersions(root) {
103
102
  }
104
103
  return failures;
105
104
  }
105
+ /**
106
+ * Version Bun should embed for a workspace dependency when packing for publish.
107
+ * Unpublished package.json prereleases (prepare-next) map to the last stable tag.
108
+ */
109
+ export function publishPackDependencyVersion(root, projectName, packageVersion) {
110
+ return lockfileTargetVersion(root, projectName, packageVersion, 'publish');
111
+ }
112
+ function lockfileTargetVersion(root, projectName, packageVersion, mode) {
113
+ if (mode === 'install' || !packageVersion.includes('-')) {
114
+ return packageVersion;
115
+ }
116
+ return latestStableTagVersion(root, projectName) ?? packageVersion;
117
+ }
106
118
  function latestStableTagVersion(root, projectName) {
107
119
  try {
108
120
  const output = execSync(`git tag --list '${projectName}@*' --sort=-v:refname`, {
@@ -51,5 +51,16 @@ export declare function applyManagedFiles(root: string, mode: 'update' | 'check'
51
51
  export declare function platformTargetGlobsForTest(targetNames: Iterable<string>): string[];
52
52
  export declare function printResults(results: FileResult[]): void;
53
53
  export declare function validateManagedFiles(root: string): number;
54
+ /**
55
+ * Non-blocking drift report: prints the per-file table and surfaces drift as
56
+ * GitHub Actions warning annotations (plain stderr elsewhere) without failing
57
+ * the run. Managed-file drift is derived state with its own remediation flow
58
+ * (the persistent managed-files PR); only `monorepo check` without --warn and
59
+ * PR-scoped gates treat it as an error.
60
+ *
61
+ * Under GitHub Actions the drifted-file count is published as the step output
62
+ * `drifted`, so downstream steps gate declaratively instead of parsing logs.
63
+ */
64
+ export declare function warnOnManagedFileDrift(root: string): void;
54
65
  export {};
55
66
  //# sourceMappingURL=managed-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"managed-files.d.ts","sourceRoot":"","sources":["../../src/monorepo/managed-files.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,yEAAyE,CAAC;AAU3G,sFAAsF;AACtF,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED,uCAAuC;AACvC,eAAO,MAAM,wBAAwB,0BAAoB,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;8BAE8B;AAC9B,iBAAS,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAkCxG;AAED,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,iCAA2B,CAAC;AAExE;+EAC+E;AAC/E,iBAAS,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqBtF;AAED,yCAAyC;AACzC,eAAO,MAAM,gCAAgC,kCAA4B,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC;CACxG;AA+GD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,EAAE,CAG/F;AA6FD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAMlF;AAsHD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAIxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD"}
1
+ {"version":3,"file":"managed-files.d.ts","sourceRoot":"","sources":["../../src/monorepo/managed-files.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,yEAAyE,CAAC;AAU3G,sFAAsF;AACtF,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAIlF;AAED,uCAAuC;AACvC,eAAO,MAAM,wBAAwB,0BAAoB,CAAC;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;8BAE8B;AAC9B,iBAAS,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAkCxG;AAED,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,iCAA2B,CAAC;AAExE;+EAC+E;AAC/E,iBAAS,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAqBtF;AAED,yCAAyC;AACzC,eAAO,MAAM,gCAAgC,kCAA4B,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,YAAY,CAAC;CACxG;AAyHD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,EAAE,CAG/F;AA6FD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAMlF;AAgGD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAIxD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAkBzD"}