@theholocron/holocron-plugin-vercel 5.0.0-alpha.28 → 5.0.0-alpha.280

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.
package/README.md CHANGED
@@ -64,13 +64,18 @@ Capability covers:
64
64
  an app) — `defaultFramework` only applies to `ensureProject()`'s
65
65
  Git-linked path.
66
66
  - `getDeployment()` — fetch a deployment by id
67
- - `ensureCustomDomain()` — idempotent add (list → check → add). Adding
68
- a domain new to the Vercel account returns `verified: false` with a
69
- DNS verification challenge (usually a CNAME to a per-project target
70
- Vercel generates — never a fixed well-known host). The returned DNS
71
- record is handed to the configured `dns` provider by `holocron setup`.
72
-
73
- Declare the production domain in the Vercel provider options. On `holocron setup`,
67
+ - `ensureCustomDomain()` — idempotent add (list → add-if-missing →
68
+ check DNS routing). Ownership (`verified`) and DNS routing are
69
+ separate: once a team already owns a domain's apex, every new
70
+ subdomain auto-verifies immediately with no fresh challenge, so
71
+ attachment alone can't tell you whether traffic is actually routed
72
+ to Vercel yet. `domains.config()` answers that regardless of
73
+ ownership state, returning a per-project CNAME target — never a
74
+ fixed well-known host — only when DNS isn't already configured. The
75
+ returned DNS record is handed to the configured `dns` provider by
76
+ `holocron repo setup`.
77
+
78
+ Declare the production domain in the Vercel provider options. On `holocron repo setup`,
74
79
  the domain is attached to the project and any Vercel verification CNAME is
75
80
  upserted through the configured DNS provider:
76
81
 
package/dist/index.d.mts CHANGED
@@ -1,22 +1,26 @@
1
- import { AuthError, DeployFunctionConfig, DeployFunctionResult, Deployment, DeploymentProject, DeploymentProjectSettings, DeploymentRecord, DeploymentTarget, DeploymentTrigger, DnsRecordRequest, ResolveTokenInput } from "@theholocron/cli";
1
+ import { AuthError, DeployFunctionConfig, DeployFunctionResult, Deployment, DeploymentProject, DeploymentProjectSettings, DeploymentRecord, DeploymentTarget, DeploymentTrigger, DnsRecordRequest, PluginToken, ResolveTokenInput, VerifyTokenFailure, VerifyTokenResult, VerifyTokenResult as VerifyTokenResult$1, VerifyTokenSuccess } from "@theholocron/cli";
2
2
  import { VercelClient, VercelClient as VercelClient$1, VercelClientOptions, createVercelClient } from "@theholocron/vercel-client";
3
- //#region src/auth.d.ts
4
- declare const resolveToken: (input?: ResolveTokenInput) => string;
5
- //#endregion
6
- //#region src/capabilities/deployment.d.ts
3
+ /** Resolves the Vercel token from `--token`, `HOLOCRON_VERCEL_TOKEN`, `VERCEL_TOKEN` or the keyring, and throws an `AuthError` when none is set. */
4
+ export declare const resolveToken: import("@theholocron/cli").TokenResolver;
5
+ /** Every token this plugin takes, for `holocron doctor tokens`. */
6
+ export declare const tokens: PluginToken[];
7
7
  interface DeploymentOptions {
8
8
  /** Optional framework hint passed to project creates. Defaults to "nextjs". */
9
9
  defaultFramework?: string;
10
- /** Custom domain that `holocron setup` should attach to this project. */
10
+ /** Custom domain that `holocron repo setup` should attach to this project. */
11
11
  domain?: string;
12
12
  }
13
- declare class VercelDeployment implements Deployment {
13
+ /** The `deployment` capability for Vercel: projects, environment variables, deployments, functions and custom domains. */
14
+ export declare class VercelDeployment implements Deployment {
14
15
  private readonly client;
16
+ /** The capability key, always `deployment`. */
15
17
  readonly key: "deployment";
18
+ /** The provider name, `vercel`. */
16
19
  readonly providerName = "vercel";
17
20
  readonly domain?: string;
18
21
  private readonly defaultFramework;
19
22
  constructor(client: () => VercelClient$1, opts?: DeploymentOptions);
23
+ /** Lists the projects the token can see, mapped to the provider-neutral shape. */
20
24
  listProjects(): Promise<DeploymentProject[]>;
21
25
  ensureProject(input: {
22
26
  name: string;
@@ -24,74 +28,78 @@ declare class VercelDeployment implements Deployment {
24
28
  repo?: string;
25
29
  rootDirectory?: string;
26
30
  }): Promise<DeploymentProject>;
31
+ /** Updates a project's preview-deployment and Git-provider deployment settings and returns the updated project. */
27
32
  updateProjectSettings(projectId: string, settings: DeploymentProjectSettings): Promise<DeploymentProject>;
33
+ /** Lists the names of the project's environment variables that apply to `target`. */
28
34
  listEnvVars(projectId: string, target: DeploymentTarget): Promise<string[]>;
35
+ /** Creates or updates (upsert) an environment variable on the project for `target`. */
29
36
  setEnvVar(projectId: string, target: DeploymentTarget, name: string, value: string): Promise<void>;
30
37
  triggerDeployment(input: {
31
38
  projectId: string;
32
39
  branch: string;
33
40
  target?: DeploymentTrigger;
34
41
  }): Promise<DeploymentRecord>;
42
+ /** Fetches a deployment by id; the record's branch is the deployment's Git commit ref, or `null` when it has none. */
35
43
  getDeployment(deploymentId: string): Promise<DeploymentRecord>;
36
44
  deployFunction(projectId: string, config: DeployFunctionConfig): Promise<DeployFunctionResult>;
37
45
  /**
38
- * Idempotent — no-op when `hostname` is already on the project,
39
- * matching `Deployment.ensureCustomDomain`'s contract (never break
40
- * on re-runs, per CLAUDE.md's probe-then-act standard). Adding it
41
- * the first time returns `verified: false` for a domain new to this
42
- * Vercel account, plus a `verification` challenge — usually CNAME, a
43
- * unique per-project target Vercel generates (never a fixed
44
- * well-known host, confirmed via Vercel's own docs). Returned as a
45
- * `DnsRecordRequest` — the caller (e.g. `holocron setup`'s
46
- * custom-domain step) hands it straight to `dns.upsertRecord()`,
47
- * same as `Wiki.dnsRecord()` already does for the wiki's own domain.
46
+ * Idempotent — matches `Deployment.ensureCustomDomain`'s contract
47
+ * (never break on re-runs, per CLAUDE.md's probe-then-act standard).
48
+ *
49
+ * Ownership (`domains.add`'s `verified`) and DNS routing are separate
50
+ * concerns: once a team already owns the domain's apex (true for any
51
+ * org with more than one project on the same domain), every new
52
+ * subdomain auto-verifies immediately with no `verification`
53
+ * challenge — re-adding an already-attached domain returns 409, not
54
+ * a fresh one. So attachment alone can't tell us whether traffic is
55
+ * actually routed to Vercel yet. `domains.config()` (Vercel's DNS
56
+ * *configuration* check) answers that regardless of ownership state:
57
+ * `misconfigured` + a `recommendedCNAME`, per-project, never a fixed
58
+ * well-known host — always read it from this response, never
59
+ * hardcode it. Returned as a `DnsRecordRequest` — the caller (e.g.
60
+ * `holocron repo setup`'s custom-domain step) hands it straight to
61
+ * `dns.upsertRecord()`, same as `Wiki.dnsRecord()` already does for
62
+ * the wiki's own domain.
48
63
  */
49
64
  ensureCustomDomain(projectId: string, hostname: string): Promise<DnsRecordRequest | null>;
50
65
  private getProjectByName;
51
66
  }
52
- //#endregion
53
- //#region src/verify-token.d.ts
54
- /**
55
- * `verifyToken` — plugin-level export used by `holocron auth set` +
56
- * `holocron auth check`. Hits `GET /v2/user` and translates the
57
- * response into the normalized `VerifyTokenResult` shape.
58
- */
59
- interface VerifyTokenSuccess {
60
- ok: true;
61
- subject: string;
62
- }
63
- interface VerifyTokenFailure {
64
- ok: false;
65
- message: string;
66
- }
67
- type VerifyTokenResult = VerifyTokenSuccess | VerifyTokenFailure;
68
67
  interface VerifyTokenOptions {
69
68
  baseUrl?: string;
70
69
  fetch?: typeof fetch;
71
70
  }
72
- declare function verifyToken(token: string, opts?: VerifyTokenOptions): Promise<VerifyTokenResult>;
73
- //#endregion
74
- //#region src/index.d.ts
75
- interface VercelPluginOptions extends ResolveTokenInput {
71
+ /** Checks a Vercel token by fetching the current user; the success subject is `user @` followed by the email, username, name or id, the failure carries the error message. */
72
+ export declare function verifyToken(token: string, opts?: VerifyTokenOptions): Promise<VerifyTokenResult$1>;
73
+ /** Options for the Vercel plugin: token resolution, team, defaults for new projects and test overrides. */
74
+ export interface VercelPluginOptions extends ResolveTokenInput {
76
75
  /** Vercel team id. Set when working with a team-owned project. */
77
76
  teamId?: string;
78
77
  /** Default framework slug for new project creates. Defaults to "nextjs". */
79
78
  defaultFramework?: string;
80
- /** Custom domain that `holocron setup` should attach to the Vercel project. */
79
+ /** Custom domain that `holocron repo setup` should attach to the Vercel project. */
81
80
  domain?: string;
82
81
  /** Override base URL for tests. */
83
82
  baseUrl?: string;
84
83
  /** Override `fetch` for tests. */
85
84
  fetch?: typeof fetch;
86
85
  }
87
- interface PluginContext {
86
+ /** What the plugin's capabilities share: the options and a lazily built client. */
87
+ export interface PluginContext {
88
+ /** The options the plugin was created with. */
88
89
  options: VercelPluginOptions;
90
+ /** Builds the Vercel client on first call and reuses it; the token is resolved then, not at plugin load. */
89
91
  client: () => VercelClient;
90
92
  }
91
- declare function createContext(options?: VercelPluginOptions): PluginContext;
92
- declare function deployment(ctx: PluginContext): Deployment;
93
- declare function createPlugin(options?: VercelPluginOptions): {
93
+ /** Creates the shared context for the given options; no token is resolved until `client()` is first called. */
94
+ export declare function createContext(options?: VercelPluginOptions): PluginContext;
95
+ /** Builds the `deployment` capability from a plugin context, passing on `defaultFramework` and `domain` when set. */
96
+ export declare function deployment(ctx: PluginContext): Deployment;
97
+ /** Creates the Vercel plugin: a `connection` probe and the `deployment` capability. */
98
+ export declare function createPlugin(options?: VercelPluginOptions): {
94
99
  name: string;
100
+ probes: {
101
+ connection: import("@theholocron/cli").Probe;
102
+ };
95
103
  capabilities: {
96
104
  deployment: () => Deployment;
97
105
  };
@@ -100,6 +108,5 @@ declare function createPlugin(options?: VercelPluginOptions): {
100
108
  * One-line hint printed by `holocron auth set vercel` when no token
101
109
  * is supplied or the supplied token is rejected.
102
110
  */
103
- declare const AUTH_HINT: string;
104
- //#endregion
105
- export { AUTH_HINT, AuthError, PluginContext, type ResolveTokenInput, type VercelClient, type VercelClientOptions, VercelDeployment, VercelPluginOptions, type VerifyTokenFailure, type VerifyTokenResult, type VerifyTokenSuccess, createContext, createPlugin, createVercelClient, deployment, resolveToken, verifyToken };
111
+ export declare const AUTH_HINT: string;
112
+ export { AuthError, type ResolveTokenInput, type VercelClient, type VercelClientOptions, type VerifyTokenFailure, type VerifyTokenResult, type VerifyTokenSuccess, createVercelClient };
package/dist/index.mjs CHANGED
@@ -1,17 +1,23 @@
1
- import { AuthError, ProviderApiError, createResolveToken } from "@theholocron/cli";
1
+ import { AuthError, ProviderApiError, connectionProbe, createResolveToken } from "@theholocron/cli";
2
2
  import { createVercelClient } from "@theholocron/vercel-client";
3
- //#region src/auth.ts
3
+ import { errorMessage } from "@theholocron/misc-utils";
4
+ // src/auth.ts
5
+ /** Resolves the Vercel token from `--token`, `HOLOCRON_VERCEL_TOKEN`, `VERCEL_TOKEN` or the keyring, and throws an `AuthError` when none is set. */
4
6
  const resolveToken = createResolveToken({
5
7
  envName: "HOLOCRON_VERCEL_TOKEN",
6
8
  vendorEnvName: "VERCEL_TOKEN",
7
9
  keyringService: "vercel",
8
10
  errorMessage: "no Vercel token found. Pass --token <PAT>, set HOLOCRON_VERCEL_TOKEN / VERCEL_TOKEN, or run: holocron auth set vercel <PAT>"
9
11
  });
10
- //#endregion
11
- //#region src/capabilities/deployment.ts
12
+ /** Every token this plugin takes, for `holocron doctor tokens`. */
13
+ const tokens = [resolveToken.token];
14
+ // src/capabilities/deployment.ts
15
+ /** The `deployment` capability for Vercel: projects, environment variables, deployments, functions and custom domains. */
12
16
  var VercelDeployment = class {
13
17
  client;
18
+ /** The capability key, always `deployment`. */
14
19
  key = "deployment";
20
+ /** The provider name, `vercel`. */
15
21
  providerName = "vercel";
16
22
  domain;
17
23
  defaultFramework;
@@ -20,6 +26,7 @@ var VercelDeployment = class {
20
26
  this.defaultFramework = opts.defaultFramework ?? "nextjs";
21
27
  this.domain = opts.domain;
22
28
  }
29
+ /** Lists the projects the token can see, mapped to the provider-neutral shape. */
23
30
  async listProjects() {
24
31
  const { projects } = await this.client().projects.list();
25
32
  return projects.map(mapProject);
@@ -34,16 +41,19 @@ var VercelDeployment = class {
34
41
  rootDirectory: input.rootDirectory
35
42
  }));
36
43
  }
44
+ /** Updates a project's preview-deployment and Git-provider deployment settings and returns the updated project. */
37
45
  async updateProjectSettings(projectId, settings) {
38
46
  return mapProject(await this.client().projects.update(projectId, {
39
47
  previewDeploymentsDisabled: settings.previewDeploymentsDisabled,
40
48
  gitProviderOptions: settings.gitProviderCreateDeployments !== void 0 ? { createDeployments: settings.gitProviderCreateDeployments } : void 0
41
49
  }));
42
50
  }
51
+ /** Lists the names of the project's environment variables that apply to `target`. */
43
52
  async listEnvVars(projectId, target) {
44
53
  const { envs } = await this.client().env.list(projectId);
45
54
  return envs.filter((e) => e.target.includes(target)).map((e) => e.key);
46
55
  }
56
+ /** Creates or updates (upsert) an environment variable on the project for `target`. */
47
57
  async setEnvVar(projectId, target, name, value) {
48
58
  await this.client().env.set(projectId, target, name, value);
49
59
  }
@@ -58,6 +68,7 @@ var VercelDeployment = class {
58
68
  target: input.target
59
69
  }), input.branch);
60
70
  }
71
+ /** Fetches a deployment by id; the record's branch is the deployment's Git commit ref, or `null` when it has none. */
61
72
  async getDeployment(deploymentId) {
62
73
  const raw = await this.client().deployments.get(deploymentId);
63
74
  return mapDeployment(raw, raw.meta?.githubCommitRef ?? null);
@@ -78,30 +89,45 @@ var VercelDeployment = class {
78
89
  };
79
90
  }
80
91
  /**
81
- * Idempotent — no-op when `hostname` is already on the project,
82
- * matching `Deployment.ensureCustomDomain`'s contract (never break
83
- * on re-runs, per CLAUDE.md's probe-then-act standard). Adding it
84
- * the first time returns `verified: false` for a domain new to this
85
- * Vercel account, plus a `verification` challenge — usually CNAME, a
86
- * unique per-project target Vercel generates (never a fixed
87
- * well-known host, confirmed via Vercel's own docs). Returned as a
88
- * `DnsRecordRequest` — the caller (e.g. `holocron setup`'s
89
- * custom-domain step) hands it straight to `dns.upsertRecord()`,
90
- * same as `Wiki.dnsRecord()` already does for the wiki's own domain.
92
+ * Idempotent — matches `Deployment.ensureCustomDomain`'s contract
93
+ * (never break on re-runs, per CLAUDE.md's probe-then-act standard).
94
+ *
95
+ * Ownership (`domains.add`'s `verified`) and DNS routing are separate
96
+ * concerns: once a team already owns the domain's apex (true for any
97
+ * org with more than one project on the same domain), every new
98
+ * subdomain auto-verifies immediately with no `verification`
99
+ * challenge — re-adding an already-attached domain returns 409, not
100
+ * a fresh one. So attachment alone can't tell us whether traffic is
101
+ * actually routed to Vercel yet. `domains.config()` (Vercel's DNS
102
+ * *configuration* check) answers that regardless of ownership state:
103
+ * `misconfigured` + a `recommendedCNAME`, per-project, never a fixed
104
+ * well-known host — always read it from this response, never
105
+ * hardcode it. Returned as a `DnsRecordRequest` — the caller (e.g.
106
+ * `holocron repo setup`'s custom-domain step) hands it straight to
107
+ * `dns.upsertRecord()`, same as `Wiki.dnsRecord()` already does for
108
+ * the wiki's own domain.
91
109
  */
92
110
  async ensureCustomDomain(projectId, hostname) {
93
111
  const { domains: existing } = await this.client().domains.list(projectId);
94
- if (existing.some((d) => d.name === hostname)) return null;
95
- const result = await this.client().domains.add(projectId, hostname);
96
- if (result.verified) return null;
97
- const challenge = result.verification?.find((v) => v.type === "CNAME");
98
- if (!challenge) return null;
112
+ let apexName = existing.find((d) => d.name === hostname)?.apexName;
113
+ if (!apexName) try {
114
+ apexName = (await this.client().domains.add(projectId, hostname)).apexName;
115
+ } catch (err) {
116
+ if (!(err instanceof ProviderApiError && err.status === 409)) throw err;
117
+ const { domains: refreshed } = await this.client().domains.list(projectId);
118
+ apexName = refreshed.find((d) => d.name === hostname)?.apexName;
119
+ }
120
+ if (!apexName) return null;
121
+ const config = await this.client().domains.config(hostname, projectId);
122
+ if (!config.misconfigured) return null;
123
+ const cname = config.recommendedCNAME[0]?.value;
124
+ if (!cname) return null;
99
125
  return {
100
- zone: result.apexName,
126
+ zone: apexName,
101
127
  record: {
102
128
  type: "CNAME",
103
129
  name: hostname,
104
- content: challenge.value
130
+ content: cname
105
131
  }
106
132
  };
107
133
  }
@@ -132,6 +158,7 @@ function mapDeployment(raw, branch) {
132
158
  status: normalizeState(raw.readyState)
133
159
  };
134
160
  if (raw.target) record.target = raw.target;
161
+ if (raw.errorMessage) record.errorMessage = raw.errorMessage;
135
162
  return record;
136
163
  }
137
164
  function normalizeState(s) {
@@ -144,13 +171,8 @@ function normalizeState(s) {
144
171
  case "CANCELED": return "cancelled";
145
172
  }
146
173
  }
147
- //#endregion
148
- //#region src/verify-token.ts
149
- /**
150
- * `verifyToken` — plugin-level export used by `holocron auth set` +
151
- * `holocron auth check`. Hits `GET /v2/user` and translates the
152
- * response into the normalized `VerifyTokenResult` shape.
153
- */
174
+ // src/verify-token.ts
175
+ /** Checks a Vercel token by fetching the current user; the success subject is `user @` followed by the email, username, name or id, the failure carries the error message. */
154
176
  async function verifyToken(token, opts = {}) {
155
177
  const client = createVercelClient({
156
178
  token,
@@ -166,12 +188,12 @@ async function verifyToken(token, opts = {}) {
166
188
  } catch (err) {
167
189
  return {
168
190
  ok: false,
169
- message: err instanceof Error ? err.message : String(err)
191
+ message: errorMessage(err)
170
192
  };
171
193
  }
172
194
  }
173
- //#endregion
174
- //#region src/index.ts
195
+ // src/index.ts
196
+ /** Creates the shared context for the given options; no token is resolved until `client()` is first called. */
175
197
  function createContext(options = {}) {
176
198
  let client;
177
199
  return {
@@ -184,16 +206,28 @@ function createContext(options = {}) {
184
206
  })
185
207
  };
186
208
  }
209
+ /** Builds the `deployment` capability from a plugin context, passing on `defaultFramework` and `domain` when set. */
187
210
  function deployment(ctx) {
188
211
  const opts = {};
189
212
  if (ctx.options.defaultFramework !== void 0) opts.defaultFramework = ctx.options.defaultFramework;
190
213
  if (ctx.options.domain !== void 0) opts.domain = ctx.options.domain;
191
214
  return new VercelDeployment(ctx.client, opts);
192
215
  }
216
+ /** Creates the Vercel plugin: a `connection` probe and the `deployment` capability. */
193
217
  function createPlugin(options = {}) {
194
218
  const ctx = createContext(options);
195
219
  return {
196
220
  name: "@theholocron/holocron-plugin-vercel",
221
+ probes: { connection: connectionProbe({
222
+ provider: "Vercel",
223
+ url: options.baseUrl ?? "https://api.vercel.com",
224
+ fetch: options.fetch,
225
+ token: () => resolveToken(options),
226
+ verify: (token) => verifyToken(token, {
227
+ baseUrl: options.baseUrl,
228
+ fetch: options.fetch
229
+ })
230
+ }) },
197
231
  capabilities: { deployment: () => deployment(ctx) }
198
232
  };
199
233
  }
@@ -202,5 +236,4 @@ function createPlugin(options = {}) {
202
236
  * is supplied or the supplied token is rejected.
203
237
  */
204
238
  const AUTH_HINT = "generate a Vercel Personal Access Token at https://vercel.com/account/tokens (scope: Full Account for team ops), then run: holocron auth set vercel <PAT>";
205
- //#endregion
206
- export { AUTH_HINT, AuthError, VercelDeployment, createContext, createPlugin, createVercelClient, deployment, resolveToken, verifyToken };
239
+ export { AUTH_HINT, AuthError, VercelDeployment, createContext, createPlugin, createVercelClient, deployment, resolveToken, tokens, verifyToken };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theholocron/holocron-plugin-vercel",
3
- "version": "5.0.0-alpha.28",
3
+ "version": "5.0.0-alpha.280",
4
4
  "description": "Holocron plugin for Vercel. Implements the deployment capability against the Vercel REST API.",
5
5
  "keywords": [
6
6
  "deployment",
@@ -8,12 +8,12 @@
8
8
  "plugin",
9
9
  "vercel"
10
10
  ],
11
- "homepage": "https://github.com/theholocron/holocron/tree/main/packages/holocron-plugin-vercel#readme",
11
+ "homepage": "https://docs.theholocron.dev/holocron/plugins/vercel/",
12
12
  "bugs": "https://github.com/theholocron/holocron/issues",
13
13
  "repository": {
14
14
  "type": "git",
15
15
  "url": "git+https://github.com/theholocron/holocron.git",
16
- "directory": "packages/holocron-plugin-vercel"
16
+ "directory": "plugins/holocron-plugin-vercel"
17
17
  },
18
18
  "license": "MIT",
19
19
  "author": "Newton Koumantzelis",
@@ -30,27 +30,29 @@
30
30
  "dist"
31
31
  ],
32
32
  "devDependencies": {
33
- "@theholocron/eslint-config": "^8.0.0",
34
- "@theholocron/http-client": "^1.23.0",
35
- "@theholocron/tsconfig": "^8.0.0",
36
- "@theholocron/tsdown-config": "^8.0.0",
37
- "@theholocron/vercel-client": "^1.23.0",
38
- "@theholocron/vitest-config": "^8.0.0",
39
33
  "@types/node": "^26",
40
- "@vitest/coverage-v8": "^4.1.11",
34
+ "@vitest/coverage-v8": "^5.0.5",
41
35
  "@vitest/eslint-plugin": "^1.6.27",
42
36
  "eslint": "^10.8.1",
43
37
  "eslint-plugin-n": "^18.3.0",
44
38
  "globals": "^17.11.0",
45
- "tsdown": "^0.22.14",
46
- "tsx": "4.23.12",
39
+ "tsdown": "^0.23.3",
40
+ "tsx": "4.23.15",
47
41
  "typescript": "^5.9.3",
48
- "vitest": "^4.1.11",
49
- "@theholocron/cli": "5.0.0-alpha.28"
42
+ "vitest": "^5.0.5",
43
+ "@theholocron/cli": "5.0.0-alpha.280",
44
+ "@theholocron/tsconfig": "^8.9.0-alpha.4",
45
+ "@theholocron/misc-utils": "^1.16.1-alpha.3",
46
+ "@theholocron/http-client": "^1.58.0-alpha.3",
47
+ "@theholocron/eslint-config": "^8.9.0-alpha.4",
48
+ "@theholocron/tsdown-config": "^8.9.0-alpha.4",
49
+ "@theholocron/vercel-client": "^1.58.0-alpha.3",
50
+ "@theholocron/vitest-config": "^8.9.0-alpha.4"
50
51
  },
51
52
  "peerDependencies": {
52
- "@theholocron/vercel-client": "^1.23.0",
53
- "@theholocron/cli": "5.0.0-alpha.28"
53
+ "@theholocron/misc-utils": "^1.16.0",
54
+ "@theholocron/vercel-client": "^1.43.1",
55
+ "@theholocron/cli": "5.0.0-alpha.280"
54
56
  },
55
57
  "peerDependenciesMeta": {
56
58
  "@theholocron/vercel-client": {}
@@ -63,10 +65,10 @@
63
65
  },
64
66
  "scripts": {
65
67
  "delivery.build": "tsdown",
66
- "sourceQuality.staticAnalysis": "holocron run sourceQuality.staticAnalysis --",
68
+ "sourceQuality.staticAnalysis": "eslint .",
67
69
  "test:watch": "vitest",
68
70
  "validate": "tsx scripts/validate.mjs",
69
- "verification.typeSafety": "holocron run verification.typeSafety --",
70
- "verification.unitTests": "holocron run verification.unitTests --"
71
+ "verification.typeSafety": "tsc --noEmit",
72
+ "verification.unitTests": "vitest run"
71
73
  }
72
74
  }