@qelos/aidev 0.5.2 → 0.5.3

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.
@@ -2,12 +2,15 @@ import { Task, Comment, Config, CreateTaskParams, CreateTaskResult } from '../ty
2
2
  import { TaskProvider } from './base';
3
3
  export declare class LinearProvider implements TaskProvider {
4
4
  private apiKey;
5
- private teamId;
5
+ private teamIdInput;
6
+ private resolvedTeamId;
6
7
  private label;
7
8
  private pendingStatus;
8
9
  private inReviewStatus;
9
10
  constructor(config: Config);
10
11
  private graphql;
12
+ private resolveTeamId;
13
+ private resolveLabelIds;
11
14
  private fetchWorkflowStateIds;
12
15
  fetchTasks(): Promise<Task[]>;
13
16
  fetchTasksByStatus(statuses: string[]): Promise<Task[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,MAAM;YAQZ,OAAO;YAwBP,qBAAqB;IAuB7B,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAwD7B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAMvD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA4CvC,cAAc;IA2BtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3D,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA4BtE"}
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA0BtC,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,MAAM;YAQZ,OAAO;YAwBP,aAAa;YAyBb,eAAe;YAyBf,qBAAqB;IAwB7B,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAyD7B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAMvD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA4CvC,cAAc;IA2BtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3D,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAqCtE"}
@@ -4,10 +4,16 @@ exports.LinearProvider = void 0;
4
4
  const logger_1 = require("../logger");
5
5
  const LINEAR_GRAPHQL = 'https://api.linear.app/graphql';
6
6
  const SKIP_STATE_TYPES = new Set(['completed', 'canceled']);
7
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8
+ function formatLinearError(e) {
9
+ const detail = e.extensions?.userPresentableMessage;
10
+ return detail ? `${e.message} (${detail})` : e.message;
11
+ }
7
12
  class LinearProvider {
8
13
  constructor(config) {
14
+ this.resolvedTeamId = null;
9
15
  this.apiKey = config.linearApiKey;
10
- this.teamId = config.linearTeamId;
16
+ this.teamIdInput = config.linearTeamId;
11
17
  this.label = config.linearLabel;
12
18
  this.pendingStatus = config.linearPendingStatus || 'Backlog';
13
19
  this.inReviewStatus = config.linearInReviewStatus || 'In Review';
@@ -23,30 +29,79 @@ class LinearProvider {
23
29
  });
24
30
  const raw = (await res.json());
25
31
  if (!res.ok) {
26
- const msg = raw.errors?.map((e) => e.message).join('; ') || res.statusText;
32
+ const msg = raw.errors?.map(formatLinearError).join('; ') || res.statusText;
27
33
  throw new Error(`Linear API error ${res.status}: ${msg}`);
28
34
  }
29
35
  if (raw.errors?.length) {
30
- throw new Error(`Linear GraphQL errors: ${raw.errors.map((e) => e.message).join('; ')}`);
36
+ throw new Error(`Linear GraphQL errors: ${raw.errors.map(formatLinearError).join('; ')}`);
31
37
  }
32
38
  if (raw.data === undefined) {
33
39
  throw new Error('Linear API returned no data');
34
40
  }
35
41
  return raw.data;
36
42
  }
37
- async fetchWorkflowStateIds() {
38
- const query = `
39
- query WorkflowStates($filter: WorkflowStateFilter) {
40
- workflowStates(filter: $filter) {
41
- nodes {
42
- id
43
- name
44
- type
45
- }
43
+ async resolveTeamId() {
44
+ if (this.resolvedTeamId)
45
+ return this.resolvedTeamId;
46
+ if (!this.teamIdInput) {
47
+ throw new Error('Linear: LINEAR_TEAM_ID is not set');
48
+ }
49
+ if (UUID_REGEX.test(this.teamIdInput)) {
50
+ this.resolvedTeamId = this.teamIdInput;
51
+ return this.resolvedTeamId;
52
+ }
53
+ // Linear's team(id) accepts UUID or team key (e.g. "ENG", "JAC")
54
+ const query = `
55
+ query Team($id: String!) {
56
+ team(id: $id) { id }
57
+ }
58
+ `;
59
+ const data = await this.graphql(query, { id: this.teamIdInput });
60
+ if (!data.team?.id) {
61
+ throw new Error(`Linear: could not resolve LINEAR_TEAM_ID "${this.teamIdInput}". Set it to the team UUID or team key.`);
62
+ }
63
+ this.resolvedTeamId = data.team.id;
64
+ return this.resolvedTeamId;
65
+ }
66
+ async resolveLabelIds(teamId, names) {
67
+ if (!names.length)
68
+ return { ids: [], missing: [] };
69
+ const query = `
70
+ query Labels($filter: IssueLabelFilter) {
71
+ issueLabels(filter: $filter, first: 250) {
72
+ nodes { id name }
73
+ }
74
+ }
75
+ `;
76
+ const data = await this.graphql(query, { filter: { team: { id: { eq: teamId } } } });
77
+ const byName = new Map();
78
+ for (const node of data.issueLabels.nodes)
79
+ byName.set(node.name.toLowerCase(), node.id);
80
+ const ids = [];
81
+ const missing = [];
82
+ for (const name of names) {
83
+ const id = byName.get(name.toLowerCase());
84
+ if (id)
85
+ ids.push(id);
86
+ else
87
+ missing.push(name);
46
88
  }
47
- }
89
+ return { ids, missing };
90
+ }
91
+ async fetchWorkflowStateIds() {
92
+ const query = `
93
+ query WorkflowStates($filter: WorkflowStateFilter) {
94
+ workflowStates(filter: $filter) {
95
+ nodes {
96
+ id
97
+ name
98
+ type
99
+ }
100
+ }
101
+ }
48
102
  `;
49
- const data = await this.graphql(query, { filter: { team: { id: { eq: this.teamId } } } });
103
+ const teamId = await this.resolveTeamId();
104
+ const data = await this.graphql(query, { filter: { team: { id: { eq: teamId } } } });
50
105
  const byName = new Map();
51
106
  for (const node of data.workflowStates.nodes) {
52
107
  byName.set(node.name.toLowerCase(), node.id);
@@ -54,29 +109,30 @@ class LinearProvider {
54
109
  return byName;
55
110
  }
56
111
  async fetchTasks() {
57
- logger_1.logger.debug(`Fetching Linear issues for team ${this.teamId} with label "${this.label}"`);
58
- const query = `
59
- query Issues($filter: IssueFilter) {
60
- issues(filter: $filter, first: 100) {
61
- nodes {
62
- id
63
- identifier
64
- title
65
- description
66
- url
67
- state { id name type }
68
- priority
69
- labels { nodes { name } }
70
- }
71
- }
72
- }
112
+ const teamId = await this.resolveTeamId();
113
+ logger_1.logger.debug(`Fetching Linear issues for team ${teamId} with label "${this.label}"`);
114
+ const query = `
115
+ query Issues($filter: IssueFilter) {
116
+ issues(filter: $filter, first: 100) {
117
+ nodes {
118
+ id
119
+ identifier
120
+ title
121
+ description
122
+ url
123
+ state { id name type }
124
+ priority
125
+ labels { nodes { name } }
126
+ }
127
+ }
128
+ }
73
129
  `;
74
130
  const filter = {
75
- team: { id: { eq: this.teamId } },
131
+ team: { id: { eq: teamId } },
76
132
  state: { type: { nin: ['completed', 'canceled'] } },
77
133
  };
78
134
  if (this.label && this.label !== '*') {
79
- filter.labels = { name: { eq: this.label } };
135
+ filter.labels = { some: { name: { eq: this.label } } };
80
136
  }
81
137
  const data = await this.graphql(query, { filter });
82
138
  const skipTypes = new Set(SKIP_STATE_TYPES);
@@ -100,13 +156,13 @@ class LinearProvider {
100
156
  async postComment(taskId, text) {
101
157
  logger_1.logger.debug(`Posting comment to Linear issue ${taskId}`);
102
158
  const issueId = await this.resolveIssueId(taskId);
103
- const mutation = `
104
- mutation CreateComment($input: CommentCreateInput!) {
105
- commentCreate(input: $input) {
106
- success
107
- comment { id }
108
- }
109
- }
159
+ const mutation = `
160
+ mutation CreateComment($input: CommentCreateInput!) {
161
+ commentCreate(input: $input) {
162
+ success
163
+ comment { id }
164
+ }
165
+ }
110
166
  `;
111
167
  await this.graphql(mutation, {
112
168
  input: { issueId, body: text },
@@ -115,19 +171,19 @@ class LinearProvider {
115
171
  async getComments(taskId) {
116
172
  logger_1.logger.debug(`Fetching comments for Linear issue ${taskId}`);
117
173
  const issueId = await this.resolveIssueId(taskId);
118
- const query = `
119
- query IssueComments($id: String!) {
120
- issue(id: $id) {
121
- comments {
122
- nodes {
123
- id
124
- body
125
- user { name id }
126
- createdAt
127
- }
128
- }
129
- }
130
- }
174
+ const query = `
175
+ query IssueComments($id: String!) {
176
+ issue(id: $id) {
177
+ comments {
178
+ nodes {
179
+ id
180
+ body
181
+ user { name id }
182
+ createdAt
183
+ }
184
+ }
185
+ }
186
+ }
131
187
  `;
132
188
  const data = await this.graphql(query, { id: issueId });
133
189
  const nodes = data.issue?.comments?.nodes ?? [];
@@ -142,12 +198,12 @@ class LinearProvider {
142
198
  }
143
199
  async resolveIssueId(identifier) {
144
200
  if (/^[A-Z]+-\d+$/i.test(identifier)) {
145
- const query = `
146
- query IssueByIdentifier($filter: IssueFilter) {
147
- issues(filter: $filter, first: 1) {
148
- nodes { id }
149
- }
150
- }
201
+ const query = `
202
+ query IssueByIdentifier($filter: IssueFilter) {
203
+ issues(filter: $filter, first: 1) {
204
+ nodes { id }
205
+ }
206
+ }
151
207
  `;
152
208
  const data = await this.graphql(query, {
153
209
  filter: { identifier: { eq: identifier } },
@@ -156,12 +212,12 @@ class LinearProvider {
156
212
  if (id)
157
213
  return id;
158
214
  }
159
- const byIdQuery = `
160
- query Issue($id: String!) {
161
- issue(id: $id) {
162
- id
163
- }
164
- }
215
+ const byIdQuery = `
216
+ query Issue($id: String!) {
217
+ issue(id: $id) {
218
+ id
219
+ }
220
+ }
165
221
  `;
166
222
  const byId = await this.graphql(byIdQuery, { id: identifier });
167
223
  if (byId.issue?.id)
@@ -178,12 +234,12 @@ class LinearProvider {
178
234
  throw new Error(`Linear: no workflow state matching "${status}". Available: ${names}`);
179
235
  }
180
236
  const issueId = await this.resolveIssueId(taskId);
181
- const mutation = `
182
- mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
183
- issueUpdate(id: $id, input: $input) {
184
- success
185
- }
186
- }
237
+ const mutation = `
238
+ mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
239
+ issueUpdate(id: $id, input: $input) {
240
+ success
241
+ }
242
+ }
187
243
  `;
188
244
  await this.graphql(mutation, {
189
245
  id: issueId,
@@ -191,22 +247,30 @@ class LinearProvider {
191
247
  });
192
248
  }
193
249
  async createTask(params) {
194
- const mutation = `
195
- mutation IssueCreate($input: IssueCreateInput!) {
196
- issueCreate(input: $input) {
197
- success
198
- issue { id identifier url }
250
+ const teamId = await this.resolveTeamId();
251
+ const { ids: labelIds, missing } = await this.resolveLabelIds(teamId, params.tags || []);
252
+ if (missing.length) {
253
+ logger_1.logger.warn(`Linear: skipping unknown labels (create them in Linear first): ${missing.join(', ')}`);
199
254
  }
200
- }
255
+ const mutation = `
256
+ mutation IssueCreate($input: IssueCreateInput!) {
257
+ issueCreate(input: $input) {
258
+ success
259
+ issue { id identifier url }
260
+ }
261
+ }
201
262
  `;
202
263
  const input = {
203
- teamId: this.teamId,
264
+ teamId,
204
265
  title: params.title,
205
266
  description: params.description || undefined,
206
267
  };
207
268
  if (params.priority !== undefined) {
208
269
  input.priority = params.priority;
209
270
  }
271
+ if (labelIds.length) {
272
+ input.labelIds = labelIds;
273
+ }
210
274
  const data = await this.graphql(mutation, { input });
211
275
  const issue = data.issueCreate?.issue;
212
276
  if (!issue) {
@@ -1 +1 @@
1
- {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"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"}
@@ -53,21 +53,21 @@ class MondayProvider {
53
53
  }
54
54
  async fetchTasks() {
55
55
  logger_1.logger.debug(`Fetching items from Monday board ${this.boardId}`);
56
- const query = `
57
- query ($boardId: ID!, $limit: Int!) {
58
- boards(ids: [$boardId]) {
59
- items_page(limit: $limit) {
60
- cursor
61
- items {
62
- id
63
- name
64
- url
65
- description { description }
66
- column_values { id value text }
67
- }
68
- }
69
- }
70
- }
56
+ const query = `
57
+ query ($boardId: ID!, $limit: Int!) {
58
+ boards(ids: [$boardId]) {
59
+ items_page(limit: $limit) {
60
+ cursor
61
+ items {
62
+ id
63
+ name
64
+ url
65
+ description { description }
66
+ column_values { id value text }
67
+ }
68
+ }
69
+ }
70
+ }
71
71
  `;
72
72
  const data = await this.graphql(query, {
73
73
  boardId: this.boardId,
@@ -102,10 +102,10 @@ class MondayProvider {
102
102
  }
103
103
  async postComment(taskId, text) {
104
104
  logger_1.logger.debug(`Posting update to Monday item ${taskId}`);
105
- const mutation = `
106
- mutation ($itemId: ID!, $body: String!) {
107
- create_update(item_id: $itemId, body: $body) { id }
108
- }
105
+ const mutation = `
106
+ mutation ($itemId: ID!, $body: String!) {
107
+ create_update(item_id: $itemId, body: $body) { id }
108
+ }
109
109
  `;
110
110
  await this.graphql(mutation, {
111
111
  itemId: taskId,
@@ -114,18 +114,18 @@ class MondayProvider {
114
114
  }
115
115
  async getComments(taskId) {
116
116
  logger_1.logger.debug(`Fetching updates for Monday item ${taskId}`);
117
- const query = `
118
- query ($itemId: ID!) {
119
- items(ids: [$itemId]) {
120
- updates(limit: 100) {
121
- id
122
- text_body
123
- body
124
- created_at
125
- creator { id name }
126
- }
127
- }
128
- }
117
+ const query = `
118
+ query ($itemId: ID!) {
119
+ items(ids: [$itemId]) {
120
+ updates(limit: 100) {
121
+ id
122
+ text_body
123
+ body
124
+ created_at
125
+ creator { id name }
126
+ }
127
+ }
128
+ }
129
129
  `;
130
130
  const data = await this.graphql(query, { itemId: taskId });
131
131
  const item = data.items?.[0];
@@ -142,10 +142,10 @@ class MondayProvider {
142
142
  }
143
143
  async updateStatus(taskId, status) {
144
144
  logger_1.logger.debug(`Updating Monday item ${taskId} status to "${status}"`);
145
- const mutation = `
146
- mutation ($boardId: ID!, $itemId: ID!, $columnId: String!, $value: String!) {
147
- change_column_value(board_id: $boardId, item_id: $itemId, column_id: $columnId, value: $value) { id }
148
- }
145
+ const mutation = `
146
+ mutation ($boardId: ID!, $itemId: ID!, $columnId: String!, $value: String!) {
147
+ change_column_value(board_id: $boardId, item_id: $itemId, column_id: $columnId, value: $value) { id }
148
+ }
149
149
  `;
150
150
  const value = JSON.stringify({ label: status });
151
151
  await this.graphql(mutation, {
@@ -157,10 +157,10 @@ class MondayProvider {
157
157
  }
158
158
  async createTask(params) {
159
159
  const groupId = this.groupId || 'topics';
160
- const mutation = `
161
- mutation ($boardId: ID!, $groupId: String!, $itemName: String!, $columnValues: JSON) {
162
- create_item(board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) { id }
163
- }
160
+ const mutation = `
161
+ mutation ($boardId: ID!, $groupId: String!, $itemName: String!, $columnValues: JSON) {
162
+ create_item(board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) { id }
163
+ }
164
164
  `;
165
165
  const columnValues = {};
166
166
  if (this.statusColumnId) {
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
- {
2
- "name": "@qelos/aidev",
3
- "version": "0.5.2",
4
- "description": "AI-powered task executor — polls ClickUp (and more) to implement tasks with Claude, Cursor, Windsurf, or Antigravity",
5
- "type": "commonjs",
6
- "bin": {
7
- "aidev": "dist/cli.js"
8
- },
9
- "main": "./dist/cli.js",
10
- "engines": {
11
- "node": ">=22.0.0"
12
- },
13
- "scripts": {
14
- "build": "tsc && node -e \"if(process.platform!=='win32')require('node:fs').chmodSync('dist/cli.js',0o755)\"",
15
- "dev": "tsx src/cli.ts",
16
- "test": "node scripts/run-tests.cjs",
17
- "prepublishOnly": "npm run build"
18
- },
19
- "keywords": [
20
- "ai",
21
- "cli",
22
- "clickup",
23
- "claude",
24
- "cursor",
25
- "automation"
26
- ],
27
- "author": "",
28
- "license": "MIT",
29
- "repository": {
30
- "type": "git",
31
- "url": "git+https://github.com/qelos-io/aidev.git"
32
- },
33
- "bugs": {
34
- "url": "https://github.com/qelos-io/aidev/issues"
35
- },
36
- "homepage": "https://github.com/qelos-io/aidev#readme",
37
- "publishConfig": {
38
- "access": "public"
39
- },
40
- "dependencies": {
41
- "chalk": "^4.1.2",
42
- "commander": "^12.0.0",
43
- "dotenv": "^16.4.0",
44
- "jiti": "^2.6.1"
45
- },
46
- "devDependencies": {
47
- "@types/node": "^22.0.0",
48
- "tsx": "^4.0.0",
49
- "typescript": "^5.0.0"
50
- }
51
- }
1
+ {
2
+ "name": "@qelos/aidev",
3
+ "version": "0.5.3",
4
+ "description": "AI-powered task executor — polls ClickUp (and more) to implement tasks with Claude, Cursor, Windsurf, or Antigravity",
5
+ "type": "commonjs",
6
+ "bin": {
7
+ "aidev": "dist/cli.js"
8
+ },
9
+ "main": "./dist/cli.js",
10
+ "engines": {
11
+ "node": ">=22.0.0"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc && node -e \"if(process.platform!=='win32')require('node:fs').chmodSync('dist/cli.js',0o755)\"",
15
+ "dev": "tsx src/cli.ts",
16
+ "test": "node scripts/run-tests.cjs",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "ai",
21
+ "cli",
22
+ "clickup",
23
+ "claude",
24
+ "cursor",
25
+ "automation"
26
+ ],
27
+ "author": "",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/qelos-io/aidev.git"
32
+ },
33
+ "bugs": {
34
+ "url": "https://github.com/qelos-io/aidev/issues"
35
+ },
36
+ "homepage": "https://github.com/qelos-io/aidev#readme",
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "dependencies": {
41
+ "chalk": "^4.1.2",
42
+ "commander": "^12.0.0",
43
+ "dotenv": "^16.4.0",
44
+ "jiti": "^2.6.1"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^22.0.0",
48
+ "tsx": "^4.0.0",
49
+ "typescript": "^5.0.0"
50
+ }
51
+ }
@@ -1,18 +1,18 @@
1
- 'use strict';
2
-
3
- const { spawnSync } = require('node:child_process');
4
- const { globSync } = require('node:fs');
5
- const path = require('node:path');
6
-
7
- const root = path.join(__dirname, '..');
8
- const files = globSync('src/__tests__/**/*.test.ts', { cwd: root }).sort();
9
- if (files.length === 0) {
10
- console.error('No test files found under src/__tests__');
11
- process.exit(1);
12
- }
13
- const abs = files.map((f) => path.join(root, f));
14
- const r = spawnSync(process.execPath, ['--require', 'tsx/cjs', '--test', ...abs], {
15
- cwd: root,
16
- stdio: 'inherit',
17
- });
18
- process.exit(r.status === null ? 1 : r.status);
1
+ 'use strict';
2
+
3
+ const { spawnSync } = require('node:child_process');
4
+ const { globSync } = require('node:fs');
5
+ const path = require('node:path');
6
+
7
+ const root = path.join(__dirname, '..');
8
+ const files = globSync('src/__tests__/**/*.test.ts', { cwd: root }).sort();
9
+ if (files.length === 0) {
10
+ console.error('No test files found under src/__tests__');
11
+ process.exit(1);
12
+ }
13
+ const abs = files.map((f) => path.join(root, f));
14
+ const r = spawnSync(process.execPath, ['--require', 'tsx/cjs', '--test', ...abs], {
15
+ cwd: root,
16
+ stdio: 'inherit',
17
+ });
18
+ process.exit(r.status === null ? 1 : r.status);