@detergent-software/atk 3.0.0-dev.2 → 3.0.0-dev.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 (64) hide show
  1. package/build/commands/browse.d.ts.map +1 -1
  2. package/build/commands/browse.js +3 -80
  3. package/build/commands/browse.js.map +1 -1
  4. package/build/commands/init.d.ts.map +1 -1
  5. package/build/commands/init.js +39 -405
  6. package/build/commands/init.js.map +1 -1
  7. package/build/commands/prune.d.ts.map +1 -1
  8. package/build/commands/prune.js +14 -32
  9. package/build/commands/prune.js.map +1 -1
  10. package/build/commands/publish.d.ts +3 -1
  11. package/build/commands/publish.d.ts.map +1 -1
  12. package/build/commands/publish.js +65 -390
  13. package/build/commands/publish.js.map +1 -1
  14. package/build/commands/setup.d.ts.map +1 -1
  15. package/build/commands/setup.js +37 -238
  16. package/build/commands/setup.js.map +1 -1
  17. package/build/commands/uninstall.d.ts.map +1 -1
  18. package/build/commands/uninstall.js +93 -211
  19. package/build/commands/uninstall.js.map +1 -1
  20. package/build/components/InitSuccess.d.ts +5 -0
  21. package/build/components/InitSuccess.d.ts.map +1 -0
  22. package/build/components/InitSuccess.js +20 -0
  23. package/build/components/InitSuccess.js.map +1 -0
  24. package/build/components/PromptField.d.ts +19 -0
  25. package/build/components/PromptField.d.ts.map +1 -0
  26. package/build/components/PromptField.js +7 -0
  27. package/build/components/PromptField.js.map +1 -0
  28. package/build/components/index.d.ts +2 -0
  29. package/build/components/index.d.ts.map +1 -1
  30. package/build/components/index.js +2 -0
  31. package/build/components/index.js.map +1 -1
  32. package/build/hooks/useBrowseState.d.ts +23 -0
  33. package/build/hooks/useBrowseState.d.ts.map +1 -1
  34. package/build/hooks/useBrowseState.js +77 -1
  35. package/build/hooks/useBrowseState.js.map +1 -1
  36. package/build/hooks/useConfirmation.d.ts +18 -0
  37. package/build/hooks/useConfirmation.d.ts.map +1 -0
  38. package/build/hooks/useConfirmation.js +56 -0
  39. package/build/hooks/useConfirmation.js.map +1 -0
  40. package/build/hooks/useInitState.d.ts +72 -0
  41. package/build/hooks/useInitState.d.ts.map +1 -0
  42. package/build/hooks/useInitState.js +371 -0
  43. package/build/hooks/useInitState.js.map +1 -0
  44. package/build/hooks/usePublishState.d.ts +115 -0
  45. package/build/hooks/usePublishState.d.ts.map +1 -0
  46. package/build/hooks/usePublishState.js +667 -0
  47. package/build/hooks/usePublishState.js.map +1 -0
  48. package/build/hooks/useSetupState.d.ts +57 -0
  49. package/build/hooks/useSetupState.d.ts.map +1 -0
  50. package/build/hooks/useSetupState.js +283 -0
  51. package/build/hooks/useSetupState.js.map +1 -0
  52. package/build/hooks/useUninstallState.d.ts +91 -0
  53. package/build/hooks/useUninstallState.d.ts.map +1 -0
  54. package/build/hooks/useUninstallState.js +322 -0
  55. package/build/hooks/useUninstallState.js.map +1 -0
  56. package/build/lib/checksum.d.ts +5 -0
  57. package/build/lib/checksum.d.ts.map +1 -1
  58. package/build/lib/checksum.js +18 -18
  59. package/build/lib/checksum.js.map +1 -1
  60. package/build/lib/publisher.d.ts +35 -0
  61. package/build/lib/publisher.d.ts.map +1 -1
  62. package/build/lib/publisher.js +212 -16
  63. package/build/lib/publisher.js.map +1 -1
  64. package/package.json +1 -1
@@ -0,0 +1,322 @@
1
+ import { useEffect, useReducer, useRef } from 'react';
2
+ import { findInstalledAsset, LockfileLockedError, readLockfile, withLockfileLock } from '../lib/lockfile.js';
3
+ import { findProjectRoot } from '../lib/paths.js';
4
+ import { fetchRegistry, findBundle } from '../lib/registry.js';
5
+ import { resolveTool } from '../lib/tool-resolver.js';
6
+ import { executeBundleUninstall, planBundleUninstall, planUninstall, uninstallAsset, } from '../lib/uninstaller.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Initial state factory
9
+ // ---------------------------------------------------------------------------
10
+ export function createInitialState(flags) {
11
+ return {
12
+ bundleError: null,
13
+ bundleResult: null,
14
+ errorMessage: '',
15
+ flags,
16
+ outcome: null,
17
+ phase: 'loading',
18
+ progress: 'Initializing...',
19
+ singleError: null,
20
+ singleResult: null,
21
+ };
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // Pure reducer
25
+ // ---------------------------------------------------------------------------
26
+ export function uninstallReducer(state, action) {
27
+ switch (action.type) {
28
+ case 'CANCEL': {
29
+ // Cancellation from the confirming phase leads to done
30
+ if (state.phase !== 'confirming')
31
+ return state;
32
+ return { ...state, phase: 'done' };
33
+ }
34
+ case 'CONFIRM': {
35
+ // Confirmation from the confirming phase transitions to executing
36
+ if (state.phase !== 'confirming')
37
+ return state;
38
+ return { ...state, phase: 'executing', progress: 'Executing...' };
39
+ }
40
+ case 'ERROR':
41
+ return { ...state, errorMessage: action.message, phase: 'error' };
42
+ case 'EXECUTE_DONE': {
43
+ return {
44
+ ...state,
45
+ bundleError: action.bundleError ?? state.bundleError,
46
+ bundleResult: action.bundleResult ?? state.bundleResult,
47
+ phase: 'done',
48
+ singleError: action.singleError ?? state.singleError,
49
+ singleResult: action.singleResult ?? state.singleResult,
50
+ };
51
+ }
52
+ case 'EXECUTE_ERROR': {
53
+ return { ...state, errorMessage: action.message, phase: 'error' };
54
+ }
55
+ case 'EXECUTE_PROGRESS': {
56
+ if (state.phase !== 'executing')
57
+ return state;
58
+ return { ...state, progress: action.message };
59
+ }
60
+ case 'LOAD_DONE': {
61
+ const { outcome } = action;
62
+ // Determine the next phase based on the outcome variant
63
+ switch (outcome.outcome) {
64
+ // Confirmation needed
65
+ case 'bundle-confirming':
66
+ case 'confirming':
67
+ return { ...state, outcome, phase: 'confirming' };
68
+ // Terminal outcomes — go straight to done
69
+ case 'bundle-not-installed':
70
+ case 'bundle-success':
71
+ case 'dry-run-bundle':
72
+ // falls through
73
+ case 'dry-run-single':
74
+ case 'not-installed':
75
+ case 'success':
76
+ return { ...state, outcome, phase: 'done' };
77
+ default:
78
+ return { ...state, outcome, phase: 'done' };
79
+ }
80
+ }
81
+ case 'LOAD_PROGRESS': {
82
+ if (state.phase !== 'loading')
83
+ return state;
84
+ return { ...state, progress: action.message };
85
+ }
86
+ default:
87
+ return state;
88
+ }
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Hook
92
+ // ---------------------------------------------------------------------------
93
+ export function useUninstallState(flags) {
94
+ const [state, dispatch] = useReducer(uninstallReducer, undefined, () => createInitialState(flags));
95
+ // Guard against React development-mode double-firing of effects.
96
+ const hasLoadedRef = useRef(false);
97
+ // --- Loading phase-gated effect ---
98
+ useEffect(() => {
99
+ if (state.phase !== 'loading')
100
+ return;
101
+ if (hasLoadedRef.current)
102
+ return;
103
+ hasLoadedRef.current = true;
104
+ let cancelled = false;
105
+ const load = async () => {
106
+ const { cascade, dryRun, name, projectRoot, refresh, tool, yes } = state.flags;
107
+ const projectDir = findProjectRoot(projectRoot);
108
+ const { adapter, tool: resolvedTool } = await resolveTool(tool);
109
+ // Step 1: Try bundle detection first
110
+ dispatch({ message: 'Fetching registry...', type: 'LOAD_PROGRESS' });
111
+ const registry = await fetchRegistry({ force: refresh });
112
+ if (cancelled)
113
+ return;
114
+ const bundle = findBundle(registry, name);
115
+ if (bundle) {
116
+ // Bundle uninstall path
117
+ dispatch({ message: 'Planning bundle removal...', type: 'LOAD_PROGRESS' });
118
+ const lockfile = await readLockfile(projectDir);
119
+ if (cancelled)
120
+ return;
121
+ const plan = planBundleUninstall(lockfile, bundle.name, bundle.version);
122
+ // If nothing to remove, return not-installed outcome
123
+ if (plan.assetsToRemove.length === 0 && plan.orphansToRemove.length === 0) {
124
+ dispatch({ outcome: { bundleName: bundle.name, outcome: 'bundle-not-installed' }, type: 'LOAD_DONE' });
125
+ return;
126
+ }
127
+ // Dry-run: return plan without executing
128
+ if (dryRun) {
129
+ dispatch({ outcome: { outcome: 'dry-run-bundle', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
130
+ return;
131
+ }
132
+ // If --yes flag, execute immediately
133
+ if (yes) {
134
+ dispatch({ message: 'Removing bundle assets...', type: 'LOAD_PROGRESS' });
135
+ const result = await executeBundleUninstall(plan, {
136
+ adapter,
137
+ cascade,
138
+ onProgress: (message) => {
139
+ if (!cancelled)
140
+ dispatch({ message, type: 'LOAD_PROGRESS' });
141
+ },
142
+ projectDir,
143
+ });
144
+ if (cancelled)
145
+ return;
146
+ dispatch({ outcome: { outcome: 'bundle-success', plan, result, tool: resolvedTool }, type: 'LOAD_DONE' });
147
+ return;
148
+ }
149
+ // Otherwise, return the plan for confirmation prompt
150
+ if (!process.stdin.isTTY) {
151
+ dispatch({
152
+ message: 'Confirmation required but stdin is not interactive. Use --yes (-y) to skip the prompt.',
153
+ type: 'ERROR',
154
+ });
155
+ return;
156
+ }
157
+ dispatch({ outcome: { adapter, outcome: 'bundle-confirming', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
158
+ return;
159
+ }
160
+ // Dry-run for single asset: read lockfile directly (skip lock), compute plan, return
161
+ if (dryRun) {
162
+ dispatch({ message: 'Reading lockfile...', type: 'LOAD_PROGRESS' });
163
+ const lockfile = await readLockfile(projectDir);
164
+ if (cancelled)
165
+ return;
166
+ const installed = findInstalledAsset(lockfile, name);
167
+ if (!installed) {
168
+ dispatch({ outcome: { name, outcome: 'not-installed' }, type: 'LOAD_DONE' });
169
+ return;
170
+ }
171
+ const plan = planUninstall(lockfile, name);
172
+ dispatch({ outcome: { adapter, outcome: 'dry-run-single', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
173
+ return;
174
+ }
175
+ // Fall through to existing single-asset uninstall logic
176
+ try {
177
+ const result = await withLockfileLock(projectDir, async () => {
178
+ dispatch({ message: 'Reading lockfile...', type: 'LOAD_PROGRESS' });
179
+ const lockfile = await readLockfile(projectDir);
180
+ if (cancelled)
181
+ return null;
182
+ const installed = findInstalledAsset(lockfile, name);
183
+ if (!installed) {
184
+ return { name, outcome: 'not-installed' };
185
+ }
186
+ // Compute the plan for display
187
+ const plan = planUninstall(lockfile, name);
188
+ // If dependents exist and no --yes flag, ask for confirmation
189
+ if (plan.dependents.length > 0 && !yes) {
190
+ if (!process.stdin.isTTY) {
191
+ throw new Error('Confirmation required but stdin is not interactive. Use --yes (-y) to skip the prompt.');
192
+ }
193
+ return { adapter, lockfile, outcome: 'confirming', plan, tool: resolvedTool };
194
+ }
195
+ dispatch({ message: `Uninstalling ${name}...`, type: 'LOAD_PROGRESS' });
196
+ const results = await uninstallAsset(name, {
197
+ adapter,
198
+ cascade,
199
+ lockfile,
200
+ onProgress: (message) => {
201
+ if (!cancelled)
202
+ dispatch({ message, type: 'LOAD_PROGRESS' });
203
+ },
204
+ plan,
205
+ projectDir,
206
+ });
207
+ return { outcome: 'success', plan, results, tool: resolvedTool };
208
+ });
209
+ if (cancelled)
210
+ return;
211
+ if (result === null)
212
+ return;
213
+ dispatch({ outcome: result, type: 'LOAD_DONE' });
214
+ }
215
+ catch (error) {
216
+ if (cancelled)
217
+ return;
218
+ if (error instanceof LockfileLockedError) {
219
+ dispatch({
220
+ message: 'Another ATK process is currently modifying this project. Please wait and try again.',
221
+ type: 'ERROR',
222
+ });
223
+ return;
224
+ }
225
+ throw error;
226
+ }
227
+ };
228
+ load().catch((err) => {
229
+ if (!cancelled) {
230
+ dispatch({ message: err instanceof Error ? err.message : String(err), type: 'ERROR' });
231
+ }
232
+ });
233
+ return () => {
234
+ cancelled = true;
235
+ };
236
+ // Phase-gated effect: only runs when entering 'loading'
237
+ // eslint-disable-next-line react-hooks/exhaustive-deps
238
+ }, [state.phase]);
239
+ // --- Executing phase-gated effect ---
240
+ useEffect(() => {
241
+ if (state.phase !== 'executing')
242
+ return;
243
+ let cancelled = false;
244
+ const execute = async () => {
245
+ const { outcome } = state;
246
+ if (!outcome) {
247
+ dispatch({ message: 'Internal error: no outcome available for execution.', type: 'EXECUTE_ERROR' });
248
+ return;
249
+ }
250
+ const { cascade, name, projectRoot } = state.flags;
251
+ const projectDir = findProjectRoot(projectRoot);
252
+ // Handle bundle confirmation execution
253
+ if (outcome.outcome === 'bundle-confirming') {
254
+ const { adapter, plan } = outcome;
255
+ try {
256
+ const result = await executeBundleUninstall(plan, {
257
+ adapter,
258
+ cascade,
259
+ onProgress: (message) => {
260
+ if (!cancelled)
261
+ dispatch({ message, type: 'EXECUTE_PROGRESS' });
262
+ },
263
+ projectDir,
264
+ });
265
+ if (cancelled)
266
+ return;
267
+ dispatch({ bundleResult: result, type: 'EXECUTE_DONE' });
268
+ }
269
+ catch (err) {
270
+ if (cancelled)
271
+ return;
272
+ dispatch({
273
+ bundleError: err instanceof Error ? err.message : String(err),
274
+ type: 'EXECUTE_DONE',
275
+ });
276
+ }
277
+ return;
278
+ }
279
+ // Handle single-asset confirmation execution
280
+ if (outcome.outcome === 'confirming') {
281
+ const { adapter, lockfile, plan } = outcome;
282
+ try {
283
+ const results = await uninstallAsset(name, {
284
+ adapter,
285
+ cascade,
286
+ lockfile,
287
+ onProgress: (message) => {
288
+ if (!cancelled)
289
+ dispatch({ message, type: 'EXECUTE_PROGRESS' });
290
+ },
291
+ plan,
292
+ projectDir,
293
+ });
294
+ if (cancelled)
295
+ return;
296
+ dispatch({ singleResult: results, type: 'EXECUTE_DONE' });
297
+ }
298
+ catch (err) {
299
+ if (cancelled)
300
+ return;
301
+ dispatch({
302
+ singleError: err instanceof Error ? err.message : String(err),
303
+ type: 'EXECUTE_DONE',
304
+ });
305
+ }
306
+ return;
307
+ }
308
+ };
309
+ execute().catch((err) => {
310
+ if (!cancelled) {
311
+ dispatch({ message: err instanceof Error ? err.message : String(err), type: 'EXECUTE_ERROR' });
312
+ }
313
+ });
314
+ return () => {
315
+ cancelled = true;
316
+ };
317
+ // Phase-gated effect: only runs when entering 'executing'
318
+ // eslint-disable-next-line react-hooks/exhaustive-deps
319
+ }, [state.phase]);
320
+ return [state, dispatch];
321
+ }
322
+ //# sourceMappingURL=useUninstallState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUninstallState.js","sourceRoot":"","sources":["../../src/hooks/useUninstallState.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ /** Recursively collect all files in a directory. */
2
+ export declare function collectFilesRecursive(dirPath: string, baseDir: string): Promise<Array<{
3
+ absolutePath: string;
4
+ relativePath: string;
5
+ }>>;
1
6
  /**
2
7
  * Compute a combined SHA-256 hash for all files in a directory (recursively).
3
8
  * Files are sorted by relative path to ensure deterministic output.
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgBpE"}
1
+ {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"AAIA,oDAAoD;AACpD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgBhE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgBpE"}
@@ -1,12 +1,29 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { readdir, readFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
+ /** Recursively collect all files in a directory. */
5
+ export async function collectFilesRecursive(dirPath, baseDir) {
6
+ const results = [];
7
+ const entries = await readdir(dirPath, { withFileTypes: true });
8
+ for (const entry of entries) {
9
+ const fullPath = join(dirPath, entry.name);
10
+ if (entry.isDirectory()) {
11
+ const subFiles = await collectFilesRecursive(fullPath, baseDir);
12
+ results.push(...subFiles);
13
+ }
14
+ else if (entry.isFile()) {
15
+ const relativePath = fullPath.slice(baseDir.length + 1).replace(/\\/g, '/');
16
+ results.push({ absolutePath: fullPath, relativePath });
17
+ }
18
+ }
19
+ return results;
20
+ }
4
21
  /**
5
22
  * Compute a combined SHA-256 hash for all files in a directory (recursively).
6
23
  * Files are sorted by relative path to ensure deterministic output.
7
24
  */
8
25
  export async function hashDirectory(dirPath) {
9
- const files = await collectFiles(dirPath, dirPath);
26
+ const files = await collectFilesRecursive(dirPath, dirPath);
10
27
  files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
11
28
  const hash = createHash('sha256');
12
29
  for (const file of files) {
@@ -58,21 +75,4 @@ export async function verifyChecksums(files) {
58
75
  }
59
76
  return failures;
60
77
  }
61
- /** Recursively collect all files in a directory. */
62
- async function collectFiles(dirPath, baseDir) {
63
- const results = [];
64
- const entries = await readdir(dirPath, { withFileTypes: true });
65
- for (const entry of entries) {
66
- const fullPath = join(dirPath, entry.name);
67
- if (entry.isDirectory()) {
68
- const subFiles = await collectFiles(fullPath, baseDir);
69
- results.push(...subFiles);
70
- }
71
- else if (entry.isFile()) {
72
- const relativePath = fullPath.slice(baseDir.length + 1).replace(/\\/g, '/');
73
- results.push({ absolutePath: fullPath, relativePath });
74
- }
75
- }
76
- return results;
77
- }
78
78
  //# sourceMappingURL=checksum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Adapter } from './schemas/adapter.js';
1
2
  import type { Bundle } from './schemas/bundle.js';
2
3
  import type { AssetType, Manifest } from './schemas/manifest.js';
3
4
  import type { Registry } from './schemas/registry.js';
@@ -20,6 +21,15 @@ export interface PublishTarget {
20
21
  type: PublishType;
21
22
  }
22
23
  export type PublishType = 'asset' | 'bundle';
24
+ export interface RawAssetDetection {
25
+ assetType: AssetType;
26
+ files: Array<{
27
+ absolutePath: string;
28
+ relativePath: string;
29
+ }>;
30
+ name: string;
31
+ sourceDir: string;
32
+ }
23
33
  export interface ValidationResult {
24
34
  errors: string[];
25
35
  valid: boolean;
@@ -44,8 +54,33 @@ type PublishResultPr = {
44
54
  prUrl: string;
45
55
  };
46
56
  export declare function buildPublishPlan(target: PublishTarget, resolvedVersion: string, isUpdate: boolean, message?: string): Promise<PublishPlan>;
57
+ /**
58
+ * Build a temporary staging directory containing the collected files and a
59
+ * programmatically generated `manifest.json`, ready for the existing publish
60
+ * pipeline. The caller is responsible for cleaning up the returned temp directory.
61
+ */
62
+ export declare function buildStagingArea(detection: RawAssetDetection, metadata: {
63
+ author: string;
64
+ description: string;
65
+ org?: string;
66
+ tags: string[];
67
+ tools: Array<{
68
+ tool: string;
69
+ }>;
70
+ version?: string;
71
+ }): Promise<string>;
47
72
  export declare function bumpVersion(currentVersion: string, bumpType: 'major' | 'minor' | 'patch'): string;
48
73
  export declare function checkRegistryVersion(target: PublishTarget, registry: Registry): VersionCheckResult;
74
+ /**
75
+ * Inspect a filesystem path against adapter placement patterns to detect the asset type,
76
+ * extract the asset name, and collect the relevant files.
77
+ *
78
+ * Supports three input shapes:
79
+ * - A directory that matches a directory-based placement pattern
80
+ * - A single file that matches a file-based placement pattern
81
+ * - An entrypoint file inside a directory-based placement (expands to the parent directory)
82
+ */
83
+ export declare function detectAssetFromPath(inputPath: string, adapter: Adapter, projectDir: string): Promise<RawAssetDetection>;
49
84
  export declare function detectPublishType(directoryPath: string): Promise<PublishTarget>;
50
85
  export declare function executeDirectPublish(plan: PublishPlan, token: string, progressCallback: (msg: string) => void): Promise<PublishResult>;
51
86
  export declare function executePublish(plan: PublishPlan, token: string, progressCallback: (msg: string) => void): Promise<PublishResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/lib/publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/lib/publisher.ts"],"names":[],"mappings":"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"}