@hs-x/cli 0.1.3 → 0.2.1

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 (145) hide show
  1. package/README.md +97 -986
  2. package/dist/account-store.d.ts +45 -22
  3. package/dist/account-store.d.ts.map +1 -1
  4. package/dist/account-store.js +73 -16
  5. package/dist/account-store.js.map +1 -1
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +177 -16
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/kit.d.ts +1 -1
  10. package/dist/cli/kit.d.ts.map +1 -1
  11. package/dist/cli/kit.js.map +1 -1
  12. package/dist/commands/account.d.ts +6 -6
  13. package/dist/commands/account.d.ts.map +1 -1
  14. package/dist/commands/account.js +25 -23
  15. package/dist/commands/account.js.map +1 -1
  16. package/dist/commands/api.d.ts +1 -1
  17. package/dist/commands/completion.d.ts.map +1 -1
  18. package/dist/commands/completion.js +6 -4
  19. package/dist/commands/completion.js.map +1 -1
  20. package/dist/commands/connect.d.ts +16 -0
  21. package/dist/commands/connect.d.ts.map +1 -1
  22. package/dist/commands/connect.js +143 -17
  23. package/dist/commands/connect.js.map +1 -1
  24. package/dist/commands/control-plane-read.d.ts +3 -3
  25. package/dist/commands/control-plane-read.d.ts.map +1 -1
  26. package/dist/commands/control-plane-read.js +21 -33
  27. package/dist/commands/control-plane-read.js.map +1 -1
  28. package/dist/commands/deploy-promote.d.ts +1 -1
  29. package/dist/commands/deploy-promote.d.ts.map +1 -1
  30. package/dist/commands/deploy-promote.js +3 -3
  31. package/dist/commands/deploy-promote.js.map +1 -1
  32. package/dist/commands/deploy.d.ts.map +1 -1
  33. package/dist/commands/deploy.js +114 -7
  34. package/dist/commands/deploy.js.map +1 -1
  35. package/dist/commands/dev.d.ts +5 -0
  36. package/dist/commands/dev.d.ts.map +1 -1
  37. package/dist/commands/dev.js +233 -2
  38. package/dist/commands/dev.js.map +1 -1
  39. package/dist/commands/doctor.d.ts +1 -1
  40. package/dist/commands/doctor.js +2 -2
  41. package/dist/commands/doctor.js.map +1 -1
  42. package/dist/commands/flags.d.ts +1 -1
  43. package/dist/commands/flags.d.ts.map +1 -1
  44. package/dist/commands/flags.js +59 -35
  45. package/dist/commands/flags.js.map +1 -1
  46. package/dist/commands/help-command.d.ts +15 -1
  47. package/dist/commands/help-command.d.ts.map +1 -1
  48. package/dist/commands/help-command.js +316 -31
  49. package/dist/commands/help-command.js.map +1 -1
  50. package/dist/commands/init.d.ts +11 -8
  51. package/dist/commands/init.d.ts.map +1 -1
  52. package/dist/commands/init.js +435 -246
  53. package/dist/commands/init.js.map +1 -1
  54. package/dist/commands/link.d.ts +1 -26
  55. package/dist/commands/link.d.ts.map +1 -1
  56. package/dist/commands/link.js +11 -236
  57. package/dist/commands/link.js.map +1 -1
  58. package/dist/commands/login.d.ts +4 -12
  59. package/dist/commands/login.d.ts.map +1 -1
  60. package/dist/commands/login.js +196 -390
  61. package/dist/commands/login.js.map +1 -1
  62. package/dist/commands/migrate.d.ts +12 -7
  63. package/dist/commands/migrate.d.ts.map +1 -1
  64. package/dist/commands/migrate.js +311 -205
  65. package/dist/commands/migrate.js.map +1 -1
  66. package/dist/commands/rollback.d.ts +1 -20
  67. package/dist/commands/rollback.d.ts.map +1 -1
  68. package/dist/commands/rollback.js +6 -275
  69. package/dist/commands/rollback.js.map +1 -1
  70. package/dist/commands/status.d.ts +1 -1
  71. package/dist/commands/status.js +1 -1
  72. package/dist/commands/status.js.map +1 -1
  73. package/dist/commands/unlink.d.ts +1 -21
  74. package/dist/commands/unlink.d.ts.map +1 -1
  75. package/dist/commands/unlink.js +12 -94
  76. package/dist/commands/unlink.js.map +1 -1
  77. package/dist/commands/update.js +7 -7
  78. package/dist/commands/update.js.map +1 -1
  79. package/dist/commands/validate.d.ts +2 -2
  80. package/dist/commands/validate.d.ts.map +1 -1
  81. package/dist/commands/validate.js +1 -1
  82. package/dist/commands/validate.js.map +1 -1
  83. package/dist/config.d.ts +1 -0
  84. package/dist/config.d.ts.map +1 -1
  85. package/dist/config.js +7 -0
  86. package/dist/config.js.map +1 -1
  87. package/dist/constants.d.ts +1 -1
  88. package/dist/constants.d.ts.map +1 -1
  89. package/dist/constants.js +5 -4
  90. package/dist/constants.js.map +1 -1
  91. package/dist/control-plane-fetch.d.ts.map +1 -1
  92. package/dist/control-plane-fetch.js +2 -2
  93. package/dist/control-plane-fetch.js.map +1 -1
  94. package/dist/control-plane-loader.d.ts +1 -1
  95. package/dist/control-plane-loader.js +1 -1
  96. package/dist/dev/invoke.d.ts +44 -0
  97. package/dist/dev/invoke.d.ts.map +1 -0
  98. package/dist/dev/invoke.js +155 -0
  99. package/dist/dev/invoke.js.map +1 -0
  100. package/dist/errors-registry.d.ts.map +1 -1
  101. package/dist/errors-registry.js +86 -1
  102. package/dist/errors-registry.js.map +1 -1
  103. package/dist/help.d.ts +10 -0
  104. package/dist/help.d.ts.map +1 -1
  105. package/dist/help.js +212 -5
  106. package/dist/help.js.map +1 -1
  107. package/dist/init/templates.d.ts +11 -3
  108. package/dist/init/templates.d.ts.map +1 -1
  109. package/dist/init/templates.js +115 -27
  110. package/dist/init/templates.js.map +1 -1
  111. package/dist/project-binding.d.ts +17 -0
  112. package/dist/project-binding.d.ts.map +1 -0
  113. package/dist/project-binding.js +30 -0
  114. package/dist/project-binding.js.map +1 -0
  115. package/dist/prompt.d.ts +21 -0
  116. package/dist/prompt.d.ts.map +1 -1
  117. package/dist/prompt.js +186 -50
  118. package/dist/prompt.js.map +1 -1
  119. package/dist/reporter/human.d.ts +5 -0
  120. package/dist/reporter/human.d.ts.map +1 -1
  121. package/dist/reporter/human.js +48 -18
  122. package/dist/reporter/human.js.map +1 -1
  123. package/dist/reporter/json.d.ts +6 -0
  124. package/dist/reporter/json.d.ts.map +1 -1
  125. package/dist/reporter/json.js +16 -0
  126. package/dist/reporter/json.js.map +1 -1
  127. package/dist/reporter/style.d.ts +2 -1
  128. package/dist/reporter/style.d.ts.map +1 -1
  129. package/dist/reporter/style.js +14 -3
  130. package/dist/reporter/style.js.map +1 -1
  131. package/dist/reporter/types.d.ts +9 -0
  132. package/dist/reporter/types.d.ts.map +1 -1
  133. package/dist/reporter/types.js.map +1 -1
  134. package/dist/services/account-store.d.ts +9 -4
  135. package/dist/services/account-store.d.ts.map +1 -1
  136. package/dist/services/account-store.js +46 -22
  137. package/dist/services/account-store.js.map +1 -1
  138. package/dist/services/control-plane.js +3 -2
  139. package/dist/services/control-plane.js.map +1 -1
  140. package/dist/services/live.d.ts +1 -1
  141. package/dist/services/reporter.d.ts +3 -0
  142. package/dist/services/reporter.d.ts.map +1 -1
  143. package/dist/services/reporter.js +2 -0
  144. package/dist/services/reporter.js.map +1 -1
  145. package/package.json +21 -8
@@ -4,13 +4,21 @@ export interface TemplateFile {
4
4
  readonly path: string;
5
5
  readonly contents: string;
6
6
  }
7
+ /** Mirrors the `Distribution`/`AuthMode` unions in `@hs-x/types`. */
8
+ export type Distribution = 'private' | 'marketplace';
9
+ export type AuthMode = 'oauth' | 'static';
10
+ export interface TemplateOptions {
11
+ readonly appName?: string;
12
+ readonly distribution?: Distribution;
13
+ readonly auth?: AuthMode;
14
+ /** Scaffold a starter UI-extension app card alongside the worker. */
15
+ readonly uiExtension?: boolean;
16
+ }
7
17
  export interface Template {
8
18
  readonly id: TemplateId;
9
19
  readonly label: string;
10
20
  readonly description: string;
11
- files(name: string, options?: {
12
- readonly appName?: string;
13
- }): readonly TemplateFile[];
21
+ files(name: string, options?: TemplateOptions): readonly TemplateFile[];
14
22
  }
15
23
  export declare const TEMPLATES: readonly Template[];
16
24
  export declare function getTemplate(id: TemplateId): Template;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,aAAa,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,CAAC;AAE1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,YAAY,EAAE,CAAC;CACvF;AA8OD,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAqC,CAAC;AAE/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,QAAQ,CAIpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAiBpF"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,aAAa,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,CAAC;AAE1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC;AACrD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAyDD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,YAAY,EAAE,CAAC;CACzE;AA2RD,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAqC,CAAC;AAE/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,QAAQ,CAIpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAiBpF"}
@@ -1,28 +1,99 @@
1
+ // Starter UI-extension card. Scaffolded on `contacts` so it's valid against any
2
+ // template (we ensure the matching read scope); the developer edits from there.
3
+ const CARD = {
4
+ id: 'demo-card',
5
+ name: 'Demo card',
6
+ component: 'DemoCard',
7
+ location: 'crm.record.tab',
8
+ objectType: 'contacts',
9
+ scope: 'crm.objects.contacts.read',
10
+ entrypoint: './src/app/cards/DemoCard.tsx',
11
+ };
12
+ // Card sources MUST live under src/app/cards/ — that's the directory the
13
+ // HubSpot upload bundle packages and the hsmeta entrypoint (/app/cards/…)
14
+ // resolves against. run-008 build #2 failed because this file sat at
15
+ // project-root cards/ and never reached the bundle.
16
+ function cardsPackageFile() {
17
+ return {
18
+ path: 'src/app/cards/package.json',
19
+ contents: `${JSON.stringify({
20
+ name: 'hs-x-app-cards',
21
+ version: '0.1.0',
22
+ license: 'UNLICENSED',
23
+ dependencies: {
24
+ '@hubspot/ui-extensions': 'latest',
25
+ react: '^18.2.0',
26
+ },
27
+ }, null, 2)}\n`,
28
+ };
29
+ }
30
+ function cardComponentFile() {
31
+ return {
32
+ path: 'src/app/cards/DemoCard.tsx',
33
+ contents: `import { Flex, Text, hubspot } from "@hubspot/ui-extensions";
34
+
35
+ // Register the extension with HubSpot (do NOT export the component).
36
+ hubspot.extend(() => <DemoCard />);
37
+
38
+ function DemoCard() {
39
+ return (
40
+ <Flex direction="column" gap="small">
41
+ <Text format={{ fontWeight: "bold" }}>Hello from HS-X</Text>
42
+ <Text>Edit src/app/cards/DemoCard.tsx to build your UI extension.</Text>
43
+ </Flex>
44
+ );
45
+ }
46
+ `,
47
+ };
48
+ }
1
49
  // Scaffolded apps are installed by an external user OUTSIDE this monorepo, so
2
50
  // their package.json must reference PUBLISHED npm version ranges — never
3
51
  // `workspace:*`, which only resolves inside the workspace and makes a stranger's
4
52
  // `bun install` fail with "Workspace dependency not found".
5
53
  //
6
- // This pins the published @hs-x LIBRARY floor (the 0.1.x line), NOT the CLI's
7
- // own version — the CLI can patch independently without forcing a library
8
- // version that may not exist on npm. A caret floor also resolves to the local
9
- // workspace packages when an app is scaffolded inside the monorepo. Bump this
10
- // only when the published libraries get a new minor/major.
11
- const HSX_DEP_RANGE = '^0.1.0';
12
- function configFile(name, scopes, appName = name) {
13
- const scopeLines = scopes.map((s) => ` "${s}",`).join('\n');
54
+ // This pins the published @hs-x LIBRARY floor, NOT the CLI's own version —
55
+ // the CLI can patch independently without forcing a library version that may
56
+ // not exist on npm. A caret floor also resolves to the local workspace
57
+ // packages when an app is scaffolded inside the monorepo. Bump this when the
58
+ // published libraries get a new minor/major (publish-closure.sh releases the
59
+ // whole closure at one version, so it tracks the family line).
60
+ const HSX_DEP_RANGE = '^0.2.0';
61
+ function configFile(name, scopes, options = {}) {
62
+ const appName = options.appName ?? name;
63
+ const distribution = options.distribution ?? 'private';
64
+ const auth = options.auth ?? 'oauth';
65
+ // A card needs read access to the object it renders on; add it if missing.
66
+ const effectiveScopes = options.uiExtension && !scopes.includes(CARD.scope) ? [...scopes, CARD.scope] : scopes;
67
+ const scopeLines = effectiveScopes.map((s) => ` "${s}",`).join('\n');
68
+ // Backtick strings on purpose: the clean-room gate treats a `from "@hs-x/…"`
69
+ // with no preceding backtick as a REAL static import of the CLI bundle.
70
+ const importLine = options.uiExtension
71
+ ? `import { card, defineApp } from "@hs-x/sdk";`
72
+ : `import { defineApp } from "@hs-x/sdk";`;
73
+ const cardsBlock = options.uiExtension
74
+ ? `
75
+ cards: [
76
+ card({
77
+ id: "${CARD.id}",
78
+ name: "${CARD.name}",
79
+ location: "${CARD.location}",
80
+ objectTypes: ["${CARD.objectType}"],
81
+ entrypoint: "${CARD.entrypoint}",
82
+ }),
83
+ ],`
84
+ : '';
14
85
  return {
15
86
  path: 'hsx.config.ts',
16
- contents: `import { defineApp } from "@hs-x/sdk";
87
+ contents: `${importLine}
17
88
 
18
89
  export default defineApp({
19
90
  name: "${appName}",
20
- distribution: "private",
21
- auth: "oauth",
91
+ distribution: "${distribution}",
92
+ auth: "${auth}",
22
93
  platformVersion: "2026.03",
23
94
  scopes: [
24
95
  ${scopeLines}
25
- ],
96
+ ],${cardsBlock}
26
97
  });
27
98
  `,
28
99
  };
@@ -38,11 +109,11 @@ function slugifyPackageName(value) {
38
109
  .replace(/^[-_.]+|[-_.]+$/g, '');
39
110
  return slug.length > 0 ? slug : 'hsx-app';
40
111
  }
41
- function packageJsonFile(name, appName) {
112
+ function packageJsonFile(name, options = {}) {
42
113
  return {
43
114
  path: 'package.json',
44
115
  contents: `${JSON.stringify({
45
- name: slugifyPackageName(appName ?? name),
116
+ name: slugifyPackageName(options.appName ?? name),
46
117
  private: true,
47
118
  type: 'module',
48
119
  scripts: {
@@ -59,6 +130,17 @@ function packageJsonFile(name, appName) {
59
130
  // local-dev toolchain (ui-extensions-dev-server → webpack/babel) into
60
131
  // every scaffold install, turning a starter `bun install` into a
61
132
  // multi-minute wait. The `scripts` below call the CLI from PATH.
133
+ //
134
+ // UI-extension cards render on HubSpot, which supplies these at runtime;
135
+ // they're devDependencies so the card .tsx type-checks locally.
136
+ ...(options.uiExtension
137
+ ? {
138
+ devDependencies: {
139
+ '@hubspot/ui-extensions': 'latest',
140
+ react: '^18.2.0',
141
+ },
142
+ }
143
+ : {}),
62
144
  }, null, 2)}\n`,
63
145
  };
64
146
  }
@@ -66,7 +148,7 @@ function packageJsonFile(name, appName) {
66
148
  // and via `tsc` out of the box. Deliberately self-contained (no `extends`, no
67
149
  // path aliases) — @hs-x/* resolve from node_modules once `bun install` runs.
68
150
  // `noEmit` because HS-X bundles the worker on deploy; tsc here is for the IDE.
69
- function tsconfigFile() {
151
+ function tsconfigFile(options = {}) {
70
152
  return {
71
153
  path: 'tsconfig.json',
72
154
  contents: `${JSON.stringify({
@@ -84,8 +166,10 @@ function tsconfigFile() {
84
166
  skipLibCheck: true,
85
167
  resolveJsonModule: true,
86
168
  noEmit: true,
169
+ // UI-extension cards are React .tsx; enable JSX for the IDE/tsc.
170
+ ...(options.uiExtension ? { jsx: 'react-jsx', lib: ['ES2023', 'DOM'] } : {}),
87
171
  },
88
- include: ['src', 'hsx.config.ts'],
172
+ include: options.uiExtension ? ['src', 'cards', 'hsx.config.ts'] : ['src', 'hsx.config.ts'],
89
173
  }, null, 2)}\n`,
90
174
  };
91
175
  }
@@ -125,10 +209,11 @@ const dealsTagger = {
125
209
  description: 'A callable HubSpot workflow action with a Worker handler',
126
210
  files(name, options = {}) {
127
211
  return [
128
- packageJsonFile(name, options.appName),
129
- tsconfigFile(),
212
+ packageJsonFile(name, options),
213
+ tsconfigFile(options),
130
214
  gitignoreFile(),
131
- configFile(name, ['crm.objects.deals.read', 'crm.objects.deals.write'], options.appName),
215
+ configFile(name, ['crm.objects.deals.read', 'crm.objects.deals.write'], options),
216
+ ...(options.uiExtension ? [cardComponentFile(), cardsPackageFile()] : []),
132
217
  {
133
218
  path: 'src/workers/deals.ts',
134
219
  contents: `import { defineWorker, ok } from "@hs-x/sdk";
@@ -162,10 +247,11 @@ const empty = {
162
247
  description: 'Bare HS-X project structure; add capabilities later',
163
248
  files(name, options = {}) {
164
249
  return [
165
- packageJsonFile(name, options.appName),
166
- tsconfigFile(),
250
+ packageJsonFile(name, options),
251
+ tsconfigFile(options),
167
252
  gitignoreFile(),
168
- configFile(name, ['crm.objects.contacts.read'], options.appName),
253
+ configFile(name, ['crm.objects.contacts.read'], options),
254
+ ...(options.uiExtension ? [cardComponentFile(), cardsPackageFile()] : []),
169
255
  {
170
256
  path: 'src/workers/.gitkeep',
171
257
  contents: '',
@@ -179,10 +265,11 @@ const syncSource = {
179
265
  description: 'Webhook-driven sync into a HubSpot custom object',
180
266
  files(name, options = {}) {
181
267
  return [
182
- packageJsonFile(name, options.appName),
183
- tsconfigFile(),
268
+ packageJsonFile(name, options),
269
+ tsconfigFile(options),
184
270
  gitignoreFile(),
185
- configFile(name, ['crm.objects.custom.read', 'crm.objects.custom.write', 'crm.schemas.custom.read'], options.appName),
271
+ configFile(name, ['crm.objects.custom.read', 'crm.objects.custom.write', 'crm.schemas.custom.read'], options),
272
+ ...(options.uiExtension ? [cardComponentFile(), cardsPackageFile()] : []),
186
273
  {
187
274
  path: 'src/workers/sync.ts',
188
275
  contents: `import { defineSource, defineWorker } from "@hs-x/sdk";
@@ -190,8 +277,9 @@ const syncSource = {
190
277
  const incomingCustomers = defineSource.push({
191
278
  name: "incoming-customers",
192
279
  auth: { type: "hmac", secret: process.env.INCOMING_CUSTOMERS_WEBHOOK_SECRET },
193
- async receive({ payload }) {
194
- return { rows: [payload] };
280
+ async receive({ event }) {
281
+ const customer = event as { external_id: string; email: string };
282
+ return { rows: [{ key: customer.external_id, data: customer }] };
195
283
  },
196
284
  });
197
285
 
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Per-project, per-machine record of which HS-X account this checkout deploys
3
+ * under. A project maps 1:1 to an HS-X account (and thus one HubSpot portal),
4
+ * but we keep the binding in `.hs-x/project.json` (gitignored, excluded from
5
+ * the HubSpot bundle) rather than `hsx.config.ts` so the config stays portable
6
+ * and account-agnostic — mirroring how HubSpot's `hs` CLI keeps the active
7
+ * account out of the project source. `deploy`/`dev` prefer this over the global
8
+ * default account, so working across projects bound to different accounts does
9
+ * the right thing without re-specifying `--account-id` each time.
10
+ */
11
+ export interface ProjectBinding {
12
+ readonly accountId: string;
13
+ }
14
+ export declare function readProjectBinding(root: string): Promise<ProjectBinding | undefined>;
15
+ /** Persist the project's account binding, preserving any other project.json fields. */
16
+ export declare function writeProjectBinding(root: string, accountId: string): Promise<void>;
17
+ //# sourceMappingURL=project-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-binding.d.ts","sourceRoot":"","sources":["../src/project-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAMD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAS1F;AAED,uFAAuF;AACvF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxF"}
@@ -0,0 +1,30 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ function bindingPath(root) {
4
+ return join(root, '.hs-x', 'project.json');
5
+ }
6
+ export async function readProjectBinding(root) {
7
+ try {
8
+ const parsed = JSON.parse(await readFile(bindingPath(root), 'utf8'));
9
+ return typeof parsed.accountId === 'string' && parsed.accountId.length > 0
10
+ ? { accountId: parsed.accountId }
11
+ : undefined;
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ /** Persist the project's account binding, preserving any other project.json fields. */
18
+ export async function writeProjectBinding(root, accountId) {
19
+ const path = bindingPath(root);
20
+ await mkdir(dirname(path), { recursive: true });
21
+ let existing = {};
22
+ try {
23
+ existing = JSON.parse(await readFile(path, 'utf8'));
24
+ }
25
+ catch {
26
+ // no/!invalid existing file — start fresh
27
+ }
28
+ await writeFile(path, `${JSON.stringify({ ...existing, accountId }, null, 2)}\n`, 'utf8');
29
+ }
30
+ //# sourceMappingURL=project-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-binding.js","sourceRoot":"","sources":["../src/project-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgB1C,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAC;QAChG,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACxE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5F,CAAC"}
package/dist/prompt.d.ts CHANGED
@@ -1,20 +1,36 @@
1
+ /**
2
+ * Sentinel returned by prompts called with `allowBack: true` when the user
3
+ * presses Esc: the wizard should re-run the PREVIOUS step instead of
4
+ * cancelling. Ctrl+C always cancels (`undefined`).
5
+ */
6
+ export declare const BACK: unique symbol;
1
7
  export interface PromptOptions {
2
8
  readonly message: string;
3
9
  readonly default?: string;
4
10
  readonly validate?: (input: string) => string | undefined;
11
+ /** Esc returns the BACK sentinel instead of cancelling (Ctrl+C still cancels). */
12
+ readonly allowBack?: boolean;
5
13
  readonly stdin?: NodeJS.ReadableStream;
6
14
  readonly stderr?: NodeJS.WritableStream;
7
15
  readonly isTTY?: boolean;
8
16
  }
17
+ export declare function promptText(opts: PromptOptions & {
18
+ readonly allowBack: true;
19
+ }): Promise<string | undefined | typeof BACK>;
9
20
  export declare function promptText(opts: PromptOptions): Promise<string | undefined>;
10
21
  export declare function isInteractive(stdin?: NodeJS.ReadableStream, stderr?: NodeJS.WritableStream): boolean;
11
22
  export interface ConfirmOptions {
12
23
  readonly message: string;
13
24
  readonly default?: boolean;
25
+ /** Esc returns the BACK sentinel instead of cancelling (Ctrl+C still cancels). */
26
+ readonly allowBack?: boolean;
14
27
  readonly stdin?: NodeJS.ReadableStream;
15
28
  readonly stderr?: NodeJS.WritableStream;
16
29
  readonly isTTY?: boolean;
17
30
  }
31
+ export declare function promptConfirm(opts: ConfirmOptions & {
32
+ readonly allowBack: true;
33
+ }): Promise<boolean | undefined | typeof BACK>;
18
34
  export declare function promptConfirm(opts: ConfirmOptions): Promise<boolean | undefined>;
19
35
  export interface SelectOption<T extends string = string> {
20
36
  readonly value: T;
@@ -25,10 +41,15 @@ export interface SelectOptions<T extends string = string> {
25
41
  readonly message: string;
26
42
  readonly options: readonly SelectOption<T>[];
27
43
  readonly default?: T;
44
+ /** Esc returns the BACK sentinel instead of cancelling (Ctrl+C still cancels). */
45
+ readonly allowBack?: boolean;
28
46
  readonly stdin?: NodeJS.ReadableStream;
29
47
  readonly stderr?: NodeJS.WritableStream;
30
48
  readonly isTTY?: boolean;
31
49
  }
50
+ export declare function promptSelect<T extends string>(opts: SelectOptions<T> & {
51
+ readonly allowBack: true;
52
+ }): Promise<T | undefined | typeof BACK>;
32
53
  export declare function promptSelect<T extends string>(opts: SelectOptions<T>): Promise<T | undefined>;
33
54
  export interface MultiSelectOptions<T extends string = string> {
34
55
  readonly message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAQD,wBAAsB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2CjF;AAED,wBAAgB,aAAa,CAC3B,KAAK,GAAE,MAAM,CAAC,cAA8B,EAC5C,MAAM,GAAE,MAAM,CAAC,cAA+B,GAC7C,OAAO,CAIT;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAiCtF;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAiBxB;AA2KD,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACtD,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAoHvC"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,OAAO,MAAmC,CAAC;AA8B9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AA+FD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GACjD,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AAC7C,wBAAsB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AA0DnF,wBAAgB,aAAa,CAC3B,KAAK,GAAE,MAAM,CAAC,cAA8B,EAC5C,MAAM,GAAE,MAAM,CAAC,cAA+B,GAC7C,OAAO,CAIT;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GAClD,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AAC9C,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AAkDxF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GACpD,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,IAAI,CAAC,CAAC;AACxC,wBAAsB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAwMrG,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACtD,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CA8HvC"}