@hs-x/cli 0.4.0 → 0.4.2-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cli/index.js +1 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/completion.d.ts.map +1 -1
  4. package/dist/commands/completion.js +35 -1
  5. package/dist/commands/completion.js.map +1 -1
  6. package/dist/commands/deploy.d.ts.map +1 -1
  7. package/dist/commands/deploy.js +18 -145
  8. package/dist/commands/deploy.js.map +1 -1
  9. package/dist/commands/help-command.js +3 -0
  10. package/dist/commands/help-command.js.map +1 -1
  11. package/dist/commands/project-lifecycle-schema.d.ts +67 -0
  12. package/dist/commands/project-lifecycle-schema.d.ts.map +1 -0
  13. package/dist/commands/project-lifecycle-schema.js +143 -0
  14. package/dist/commands/project-lifecycle-schema.js.map +1 -0
  15. package/dist/commands/project-lifecycle.d.ts +61 -0
  16. package/dist/commands/project-lifecycle.d.ts.map +1 -0
  17. package/dist/commands/project-lifecycle.js +641 -0
  18. package/dist/commands/project-lifecycle.js.map +1 -0
  19. package/dist/commands/project.d.ts +37 -0
  20. package/dist/commands/project.d.ts.map +1 -1
  21. package/dist/commands/project.js +77 -0
  22. package/dist/commands/project.js.map +1 -1
  23. package/dist/constants.d.ts +1 -1
  24. package/dist/constants.d.ts.map +1 -1
  25. package/dist/constants.js +1 -1
  26. package/dist/constants.js.map +1 -1
  27. package/dist/errors-registry.d.ts.map +1 -1
  28. package/dist/errors-registry.js +50 -0
  29. package/dist/errors-registry.js.map +1 -1
  30. package/dist/hubspot-auth.d.ts.map +1 -1
  31. package/dist/hubspot-auth.js +20 -10
  32. package/dist/hubspot-auth.js.map +1 -1
  33. package/dist/hubspot-developer-client.d.ts +4 -3
  34. package/dist/hubspot-developer-client.d.ts.map +1 -1
  35. package/dist/hubspot-developer-client.js +15 -11
  36. package/dist/hubspot-developer-client.js.map +1 -1
  37. package/dist/hubspot-project-archive.d.ts.map +1 -1
  38. package/dist/hubspot-project-archive.js +15 -1
  39. package/dist/hubspot-project-archive.js.map +1 -1
  40. package/dist/hubspot-project-lifecycle.d.ts +64 -0
  41. package/dist/hubspot-project-lifecycle.d.ts.map +1 -0
  42. package/dist/hubspot-project-lifecycle.js +227 -0
  43. package/dist/hubspot-project-lifecycle.js.map +1 -0
  44. package/dist/hubspot-project-workspaces.d.ts +10 -0
  45. package/dist/hubspot-project-workspaces.d.ts.map +1 -0
  46. package/dist/hubspot-project-workspaces.js +224 -0
  47. package/dist/hubspot-project-workspaces.js.map +1 -0
  48. package/package.json +10 -9
@@ -0,0 +1,227 @@
1
+ const BUILD_TERMINAL_STATES = new Set(['SUCCESS', 'FAILURE', 'CANCELLED', 'ERROR']);
2
+ const DEPLOY_IN_PROGRESS_STATES = new Set([
3
+ 'PENDING',
4
+ 'QUEUED',
5
+ 'BUILDING',
6
+ 'DEPLOYING',
7
+ 'PROCESSING',
8
+ 'STARTED',
9
+ 'IN_PROGRESS',
10
+ ]);
11
+ export class HubSpotProjectDeployBlockedError extends Error {
12
+ response;
13
+ name = 'HubSpotProjectDeployBlockedError';
14
+ constructor(message, response) {
15
+ super(message);
16
+ this.response = response;
17
+ }
18
+ }
19
+ export class HubSpotProjectLifecycleTimeoutError extends Error {
20
+ phase;
21
+ timeoutMs;
22
+ name = 'HubSpotProjectLifecycleTimeoutError';
23
+ constructor(phase, timeoutMs) {
24
+ super(`HubSpot ${phase} did not reach a terminal state within ${timeoutMs}ms.`);
25
+ this.phase = phase;
26
+ this.timeoutMs = timeoutMs;
27
+ }
28
+ }
29
+ export async function waitForHubSpotBuildStatus(input) {
30
+ const intervalMs = input.intervalMs ?? 1_000;
31
+ const deadline = Date.now() + input.timeoutMs;
32
+ let latest;
33
+ do {
34
+ latest = await input.client.projects.getBuildStatus({
35
+ projectName: input.projectName,
36
+ buildId: input.buildId,
37
+ });
38
+ const status = readHubSpotStatus(latest);
39
+ if (status && BUILD_TERMINAL_STATES.has(status.toUpperCase()))
40
+ return latest;
41
+ await sleep(intervalMs);
42
+ } while (Date.now() < deadline);
43
+ throw new HubSpotProjectLifecycleTimeoutError('build', input.timeoutMs);
44
+ }
45
+ export async function waitForHubSpotDeployStatus(input) {
46
+ const intervalMs = input.intervalMs ?? 1_000;
47
+ const deadline = Date.now() + input.timeoutMs;
48
+ do {
49
+ const latest = await input.client.projects.getDeployStatus({
50
+ projectName: input.projectName,
51
+ deployId: input.deployId,
52
+ });
53
+ const status = readHubSpotStatus(latest);
54
+ if (status && !DEPLOY_IN_PROGRESS_STATES.has(status.toUpperCase()))
55
+ return latest;
56
+ await sleep(intervalMs);
57
+ } while (Date.now() < deadline);
58
+ throw new HubSpotProjectLifecycleTimeoutError('deploy', input.timeoutMs);
59
+ }
60
+ export async function waitForHubSpotAutoDeploy(input) {
61
+ const intervalMs = input.intervalMs ?? 2_000;
62
+ const deadline = Date.now() + input.timeoutMs;
63
+ let buildStatus = input.buildStatus;
64
+ let deployId = readHubSpotDeployLocator(buildStatus);
65
+ while (Date.now() < deadline) {
66
+ if (deployId === undefined) {
67
+ buildStatus = await input.client.projects
68
+ .getBuildStatus({ projectName: input.projectName, buildId: input.buildId })
69
+ .catch(() => undefined);
70
+ deployId = readHubSpotDeployLocator(buildStatus);
71
+ if (deployId === undefined) {
72
+ await sleep(intervalMs);
73
+ continue;
74
+ }
75
+ }
76
+ const status = await input.client.projects
77
+ .getDeployStatus({ projectName: input.projectName, deployId })
78
+ .catch(() => undefined);
79
+ const state = readHubSpotStatus(status);
80
+ if (state && !DEPLOY_IN_PROGRESS_STATES.has(state.toUpperCase())) {
81
+ return { deployId, status };
82
+ }
83
+ await sleep(intervalMs);
84
+ }
85
+ throw new HubSpotProjectLifecycleTimeoutError('auto-deploy', input.timeoutMs);
86
+ }
87
+ export async function deployHubSpotProjectBuild(input) {
88
+ const request = {
89
+ projectName: input.projectName,
90
+ buildId: input.buildId,
91
+ force: input.force,
92
+ legacy: input.legacy,
93
+ };
94
+ const response = input.executeDeploy
95
+ ? await input.executeDeploy(request)
96
+ : await input.client.projects.deployBuild(request);
97
+ const resultType = readString(response, 'buildResultType');
98
+ if (resultType === 'DEPLOY_BLOCKED') {
99
+ throw new HubSpotProjectDeployBlockedError(describeBlockedHubSpotDeploy(response), response);
100
+ }
101
+ if (resultType && resultType !== 'DEPLOY_QUEUED') {
102
+ throw new Error(`HubSpot returned unexpected deploy result ${resultType}.`);
103
+ }
104
+ const deployId = readNumber(response, 'deployId') ?? readNumber(response, 'id');
105
+ if (deployId === undefined) {
106
+ throw new Error('HubSpot queued the deploy without returning a deploy id.');
107
+ }
108
+ const status = await waitForHubSpotDeployStatus({
109
+ client: input.client,
110
+ projectName: input.projectName,
111
+ deployId,
112
+ timeoutMs: input.timeoutMs,
113
+ ...(input.intervalMs === undefined ? {} : { intervalMs: input.intervalMs }),
114
+ });
115
+ return { deployId, status };
116
+ }
117
+ export function readHubSpotBuilds(value) {
118
+ const record = asRecord(value);
119
+ const candidates = Array.isArray(record?.results)
120
+ ? record.results
121
+ : Array.isArray(record?.builds)
122
+ ? record.builds
123
+ : [];
124
+ return candidates.flatMap((candidate) => {
125
+ const build = asRecord(candidate);
126
+ const id = readNumber(build, 'buildId') ?? readNumber(build, 'id');
127
+ if (!build || id === undefined)
128
+ return [];
129
+ const status = readString(build, 'status');
130
+ const platformVersion = readString(build, 'platformVersion');
131
+ const createdAt = readString(build, 'createdAt') ?? readString(build, 'enqueuedAt');
132
+ const message = readString(build, 'uploadMessage');
133
+ const autoDeployEnabled = readBoolean(build, 'isAutoDeployEnabled');
134
+ return [
135
+ {
136
+ id,
137
+ ...(status ? { status } : {}),
138
+ ...(platformVersion ? { platformVersion } : {}),
139
+ ...(createdAt ? { createdAt } : {}),
140
+ ...(message ? { message } : {}),
141
+ ...(autoDeployEnabled === undefined ? {} : { autoDeployEnabled }),
142
+ raw: candidate,
143
+ },
144
+ ];
145
+ });
146
+ }
147
+ export function lastSuccessfulHubSpotBuild(builds) {
148
+ return builds
149
+ .filter((build) => build.status?.toUpperCase() === 'SUCCESS')
150
+ .sort((left, right) => right.id - left.id)[0];
151
+ }
152
+ export function readHubSpotStatus(value) {
153
+ return readString(value, 'status');
154
+ }
155
+ export function readHubSpotAutoDeployEnabled(value) {
156
+ return readBoolean(value, 'isAutoDeployEnabled');
157
+ }
158
+ export function readHubSpotDeployedBuildId(value) {
159
+ const record = asRecord(value);
160
+ return (readNumber(record, 'deployedBuildId') ?? readNumber(asRecord(record?.deployedBuild), 'buildId'));
161
+ }
162
+ export function describeBlockedHubSpotDeploy(value) {
163
+ const record = asRecord(value);
164
+ if (!record)
165
+ return 'HubSpot blocked the deploy.';
166
+ const details = [record.issues, record.blockingIssues, record.errors, record.message].flatMap((candidate) => {
167
+ if (typeof candidate === 'string')
168
+ return [candidate];
169
+ if (!Array.isArray(candidate))
170
+ return [];
171
+ return candidate.flatMap((item) => describeDeployIssue(item));
172
+ });
173
+ return details.length > 0
174
+ ? `HubSpot blocked the deploy: ${details.join('; ')}`
175
+ : 'HubSpot blocked the deploy. Re-run with --force only after reviewing its warnings.';
176
+ }
177
+ function describeDeployIssue(value) {
178
+ if (typeof value === 'string')
179
+ return [value];
180
+ const record = asRecord(value);
181
+ if (!record)
182
+ return [];
183
+ const label = [readString(record, 'uid'), readString(record, 'componentTypeName')]
184
+ .filter(Boolean)
185
+ .join(' ');
186
+ const blockingMessages = Array.isArray(record.blockingMessages)
187
+ ? record.blockingMessages.flatMap((message) => {
188
+ const text = readString(asRecord(message), 'message');
189
+ return text ? [`${label ? `${label}: ` : ''}${text}`] : [];
190
+ })
191
+ : [];
192
+ if (blockingMessages.length > 0)
193
+ return blockingMessages;
194
+ const message = readString(record, 'message') ??
195
+ readString(record, 'reason') ??
196
+ readString(record, 'description');
197
+ return message ? [`${label ? `${label}: ` : ''}${message}`] : label ? [label] : [];
198
+ }
199
+ function readHubSpotDeployLocator(value) {
200
+ return readNumber(asRecord(asRecord(value)?.deployStatusTaskLocator), 'id');
201
+ }
202
+ function readNumber(value, key) {
203
+ const raw = asRecord(value)?.[key];
204
+ if (typeof raw === 'number' && Number.isFinite(raw))
205
+ return raw;
206
+ if (typeof raw !== 'string')
207
+ return undefined;
208
+ const parsed = Number.parseInt(raw, 10);
209
+ return Number.isFinite(parsed) ? parsed : undefined;
210
+ }
211
+ function readString(value, key) {
212
+ const raw = asRecord(value)?.[key];
213
+ return typeof raw === 'string' && raw.length > 0 ? raw : undefined;
214
+ }
215
+ function readBoolean(value, key) {
216
+ const raw = asRecord(value)?.[key];
217
+ return typeof raw === 'boolean' ? raw : undefined;
218
+ }
219
+ function asRecord(value) {
220
+ return typeof value === 'object' && value !== null
221
+ ? value
222
+ : undefined;
223
+ }
224
+ function sleep(ms) {
225
+ return new Promise((resolve) => setTimeout(resolve, ms));
226
+ }
227
+ //# sourceMappingURL=hubspot-project-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-project-lifecycle.js","sourceRoot":"","sources":["../src/hubspot-project-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Stage the exact workspace/file-dependency closure HubSpot's project upload
3
+ * expects. The discovery and npm-packlist behavior come from HubSpot's own
4
+ * project parser; this module only materializes that canonical plan into our
5
+ * deterministic staging directory.
6
+ */
7
+ export declare function stageHubSpotWorkspaceDependencies(sourceRoot: string, stagedSourceRoot: string): Promise<void>;
8
+ /** Include external dependency bytes in deploy-preview fingerprints. */
9
+ export declare function fingerprintHubSpotWorkspaceDependencies(sourceRoot: string): Promise<string>;
10
+ //# sourceMappingURL=hubspot-project-workspaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-project-workspaces.d.ts","sourceRoot":"","sources":["../src/hubspot-project-workspaces.ts"],"names":[],"mappings":"AA6BA;;;;;GAKG;AACH,wBAAsB,iCAAiC,CACrD,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wEAAwE;AACxE,wBAAsB,uCAAuC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBjG"}
@@ -0,0 +1,224 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { copyFile, lstat, mkdir, readFile, writeFile } from 'node:fs/promises';
3
+ import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
4
+ import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules';
5
+ import { collectFileDependencies, collectWorkspaceDirectories, findAndParsePackageJsonFiles, getPackableFiles, validateWorkspaceProtocolDependencies, } from '@hubspot/project-parsing-lib/workspaces';
6
+ /**
7
+ * Stage the exact workspace/file-dependency closure HubSpot's project upload
8
+ * expects. The discovery and npm-packlist behavior come from HubSpot's own
9
+ * project parser; this module only materializes that canonical plan into our
10
+ * deterministic staging directory.
11
+ */
12
+ export async function stageHubSpotWorkspaceDependencies(sourceRoot, stagedSourceRoot) {
13
+ const plan = await planWorkspaceDependencies(sourceRoot);
14
+ await Promise.all(plan.externalEntries.map((entry) => copyExternalEntry(entry, stagedSourceRoot)));
15
+ await rewritePackageJsonFiles(sourceRoot, stagedSourceRoot, plan);
16
+ await rewritePackageLockFiles(sourceRoot, stagedSourceRoot, plan);
17
+ }
18
+ /** Include external dependency bytes in deploy-preview fingerprints. */
19
+ export async function fingerprintHubSpotWorkspaceDependencies(sourceRoot) {
20
+ const plan = await planWorkspaceDependencies(sourceRoot);
21
+ const hash = createHash('sha256');
22
+ for (const entry of [...plan.externalEntries].sort((left, right) => left.archivePath.localeCompare(right.archivePath))) {
23
+ hash.update(`${entry.kind}\0${entry.archivePath}\0`);
24
+ if (entry.kind === 'tarball') {
25
+ hash.update(await readFile(entry.source));
26
+ hash.update('\0');
27
+ continue;
28
+ }
29
+ const packable = [...(await getPackableFiles(entry.source))].sort();
30
+ for (const file of packable) {
31
+ if (shouldIgnoreFile(file, true))
32
+ continue;
33
+ const path = join(entry.source, file);
34
+ const metadata = await lstat(path);
35
+ if (!metadata.isFile())
36
+ continue;
37
+ hash.update(`file\0${file.replaceAll('\\', '/')}\0`);
38
+ hash.update(await readFile(path));
39
+ hash.update('\0');
40
+ }
41
+ }
42
+ return `sha256:${hash.digest('hex')}`;
43
+ }
44
+ async function planWorkspaceDependencies(sourceRoot) {
45
+ const parsed = await findAndParsePackageJsonFiles(sourceRoot);
46
+ const [workspaceMappings, fileMappings] = await Promise.all([
47
+ collectWorkspaceDirectories(parsed),
48
+ collectFileDependencies(parsed),
49
+ ]);
50
+ validateWorkspaceProtocolDependencies(parsed, workspaceMappings);
51
+ const packageWorkspaces = new Map();
52
+ const packageFileDependencies = new Map();
53
+ const externalArchivePaths = new Map();
54
+ const archiveOwners = new Map();
55
+ const externalEntries = [];
56
+ const packageDirectoriesWithExternals = new Set();
57
+ for (const mapping of workspaceMappings) {
58
+ const entries = packageWorkspaces.get(mapping.sourcePackageJsonPath) ?? [];
59
+ packageWorkspaces.set(mapping.sourcePackageJsonPath, entries);
60
+ if (isInside(sourceRoot, mapping.workspaceDir)) {
61
+ entries.push(toPosix(relative(dirname(mapping.sourcePackageJsonPath), mapping.workspaceDir)));
62
+ continue;
63
+ }
64
+ const archivePath = registerExternal(mapping.workspaceDir, 'directory', externalArchivePaths, archiveOwners, externalEntries);
65
+ entries.push(relativeArchivePath(sourceRoot, mapping.sourcePackageJsonPath, archivePath));
66
+ packageDirectoriesWithExternals.add(dirname(mapping.sourcePackageJsonPath));
67
+ }
68
+ for (const mapping of fileMappings) {
69
+ if (isInside(sourceRoot, mapping.localPath))
70
+ continue;
71
+ const archivePath = registerExternal(mapping.localPath, mapping.kind, externalArchivePaths, archiveOwners, externalEntries);
72
+ const dependencies = packageFileDependencies.get(mapping.sourcePackageJsonPath) ?? new Map();
73
+ packageFileDependencies.set(mapping.sourcePackageJsonPath, dependencies);
74
+ dependencies.set(mapping.packageName, {
75
+ protocol: mapping.protocol,
76
+ archivePath: relativeArchivePath(sourceRoot, mapping.sourcePackageJsonPath, archivePath),
77
+ });
78
+ packageDirectoriesWithExternals.add(dirname(mapping.sourcePackageJsonPath));
79
+ }
80
+ return {
81
+ packageWorkspaces,
82
+ packageFileDependencies,
83
+ externalEntries,
84
+ externalArchivePaths,
85
+ packageDirectoriesWithExternals,
86
+ };
87
+ }
88
+ function registerExternal(source, kind, externalArchivePaths, archiveOwners, entries) {
89
+ const absolute = resolve(source);
90
+ const existing = externalArchivePaths.get(absolute);
91
+ if (existing)
92
+ return existing;
93
+ const archivePath = computeExternalArchivePath(absolute, kind);
94
+ const owner = archiveOwners.get(archivePath);
95
+ if (owner && owner !== absolute) {
96
+ throw new Error(`Workspace archive collision between ${owner} and ${absolute}.`);
97
+ }
98
+ archiveOwners.set(archivePath, absolute);
99
+ externalArchivePaths.set(absolute, archivePath);
100
+ entries.push({ source: absolute, archivePath, kind });
101
+ return archivePath;
102
+ }
103
+ async function copyExternalEntry(entry, stagedSourceRoot) {
104
+ const destination = join(stagedSourceRoot, entry.archivePath);
105
+ if (entry.kind === 'tarball') {
106
+ await mkdir(dirname(destination), { recursive: true });
107
+ await copyFile(entry.source, destination);
108
+ return;
109
+ }
110
+ const packable = [...(await getPackableFiles(entry.source))].sort();
111
+ for (const file of packable) {
112
+ if (shouldIgnoreFile(file, true))
113
+ continue;
114
+ const source = join(entry.source, file);
115
+ const metadata = await lstat(source);
116
+ if (metadata.isSymbolicLink()) {
117
+ throw new Error(`External HubSpot project dependency contains a symbolic link: ${file}.`);
118
+ }
119
+ if (!metadata.isFile())
120
+ continue;
121
+ const target = join(destination, file);
122
+ await mkdir(dirname(target), { recursive: true });
123
+ await copyFile(source, target);
124
+ }
125
+ }
126
+ async function rewritePackageJsonFiles(sourceRoot, stagedSourceRoot, plan) {
127
+ const paths = new Set([...plan.packageWorkspaces.keys(), ...plan.packageFileDependencies.keys()]);
128
+ for (const sourcePath of paths) {
129
+ const stagedPath = join(stagedSourceRoot, relative(sourceRoot, sourcePath));
130
+ const raw = await readFile(stagedPath, 'utf8');
131
+ const parsed = JSON.parse(raw);
132
+ const workspaces = plan.packageWorkspaces.get(sourcePath);
133
+ if (workspaces && parsed.workspaces)
134
+ parsed.workspaces = workspaces;
135
+ const dependencies = asRecord(parsed.dependencies);
136
+ for (const [name, replacement] of plan.packageFileDependencies.get(sourcePath) ?? []) {
137
+ if (dependencies && typeof dependencies[name] === 'string') {
138
+ dependencies[name] = `${replacement.protocol}:${replacement.archivePath}`;
139
+ }
140
+ }
141
+ await writeFile(stagedPath, `${JSON.stringify(parsed, null, 2)}\n`);
142
+ }
143
+ }
144
+ async function rewritePackageLockFiles(sourceRoot, stagedSourceRoot, plan) {
145
+ for (const packageDirectory of plan.packageDirectoriesWithExternals) {
146
+ const sourceLock = join(packageDirectory, 'package-lock.json');
147
+ let raw;
148
+ try {
149
+ raw = await readFile(sourceLock, 'utf8');
150
+ }
151
+ catch {
152
+ continue;
153
+ }
154
+ const mappings = [...plan.externalArchivePaths].map(([externalPath, archivePath]) => ({
155
+ oldPath: toPosix(relative(packageDirectory, externalPath)),
156
+ newPath: toPosix(relative(packageDirectory, join(sourceRoot, archivePath))),
157
+ }));
158
+ const rewritten = rewriteLockfile(JSON.parse(raw), mappings);
159
+ const stagedLock = join(stagedSourceRoot, relative(sourceRoot, sourceLock));
160
+ await writeFile(stagedLock, `${JSON.stringify(rewritten, null, 2)}\n`);
161
+ }
162
+ }
163
+ function rewriteLockfile(lockfile, mappings) {
164
+ const packages = asRecord(lockfile.packages);
165
+ if (!packages)
166
+ return lockfile;
167
+ const rewritten = {};
168
+ for (const [key, value] of Object.entries(packages)) {
169
+ rewritten[mappings.find((mapping) => mapping.oldPath === key)?.newPath ?? key] = value;
170
+ }
171
+ for (const [key, value] of Object.entries(rewritten)) {
172
+ const entry = asRecord(value);
173
+ const resolved = typeof entry?.resolved === 'string' ? entry.resolved : undefined;
174
+ if (!key.startsWith('node_modules/') || !entry || !resolved)
175
+ continue;
176
+ const fileUrl = resolved.startsWith('file:');
177
+ const path = fileUrl ? resolved.slice('file:'.length) : resolved;
178
+ const replacement = mappings.find((mapping) => mapping.oldPath === path);
179
+ if (replacement) {
180
+ rewritten[key] = {
181
+ ...entry,
182
+ resolved: fileUrl ? `file:${replacement.newPath}` : replacement.newPath,
183
+ };
184
+ }
185
+ }
186
+ const root = asRecord(rewritten['']);
187
+ if (root && Array.isArray(root.workspaces)) {
188
+ rewritten[''] = {
189
+ ...root,
190
+ workspaces: root.workspaces.map((workspace) => {
191
+ if (typeof workspace !== 'string')
192
+ return workspace;
193
+ return mappings.find((mapping) => mapping.oldPath === workspace)?.newPath ?? workspace;
194
+ }),
195
+ };
196
+ }
197
+ return { ...lockfile, packages: rewritten };
198
+ }
199
+ function relativeArchivePath(sourceRoot, sourcePackageJson, archivePath) {
200
+ const packageDirectoryInArchive = relative(sourceRoot, dirname(sourcePackageJson));
201
+ return toPosix(relative(packageDirectoryInArchive, archivePath));
202
+ }
203
+ function computeExternalArchivePath(source, kind) {
204
+ const hash = createHash('sha256').update(resolve(source)).digest('hex').slice(0, 8);
205
+ const name = basename(source);
206
+ if (kind === 'tarball') {
207
+ const stem = name.replace(/(?:\.tar\.gz|\.tgz|\.tar)$/i, '');
208
+ return `_workspaces/${stem}-${hash}/${name}`;
209
+ }
210
+ return `_workspaces/${name}-${hash}`;
211
+ }
212
+ function isInside(parent, child) {
213
+ const path = relative(resolve(parent), resolve(child));
214
+ return path === '' || (!path.startsWith('..') && !isAbsolute(path));
215
+ }
216
+ function toPosix(path) {
217
+ return path.replaceAll('\\', '/');
218
+ }
219
+ function asRecord(value) {
220
+ return typeof value === 'object' && value !== null
221
+ ? value
222
+ : undefined;
223
+ }
224
+ //# sourceMappingURL=hubspot-project-workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-project-workspaces.js","sourceRoot":"","sources":["../src/hubspot-project-workspaces.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hs-x/cli",
3
- "version": "0.4.0",
3
+ "version": "0.4.2-next.0",
4
4
  "description": "HS-X CLI — init, validate, connect, dev, deploy, promote, rollback, doctor, sync. Installs the `hs-x` command.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,12 +18,12 @@
18
18
  "@effect/cli": "0.75.1",
19
19
  "@effect/platform": "0.96.1",
20
20
  "@effect/platform-bun": "0.89.0",
21
- "@hs-x/codegen": "0.4.0",
22
- "@hs-x/hubspot": "0.4.0",
23
- "@hs-x/hubspot-cli": "0.4.0",
24
- "@hs-x/runtime": "0.4.0",
25
- "@hs-x/types": "0.4.0",
26
- "@hs-x/validator": "0.4.0",
21
+ "@hs-x/codegen": "0.4.1",
22
+ "@hs-x/hubspot": "0.4.1",
23
+ "@hs-x/hubspot-cli": "0.4.2-next.0",
24
+ "@hs-x/runtime": "0.4.1",
25
+ "@hs-x/types": "0.4.1",
26
+ "@hs-x/validator": "0.4.1",
27
27
  "@hubspot/local-dev-lib": "5.10.3",
28
28
  "@hubspot/project-parsing-lib": "0.22.1",
29
29
  "@hubspot/ui-extensions-dev-server": "2.1.2",
@@ -35,9 +35,10 @@
35
35
  "access": "public"
36
36
  },
37
37
  "devDependencies": {
38
- "@hs-x/fixtures": "0.4.0",
38
+ "@hs-x/control-plane": "0.1.0",
39
+ "@hs-x/fixtures": "0.4.1",
39
40
  "@types/node": "^22.10.0",
40
- "@hs-x/control-plane": "0.1.0"
41
+ "ajv": "8.18.0"
41
42
  },
42
43
  "license": "Apache-2.0",
43
44
  "engines": {