11// SPDX-License-Identifier: MIT
22// Copyright © 2025 TON Studio
33import * as vscode from "vscode"
4- import * as fs from "node:fs"
5- import * as path from "node:path"
6- import { TaskDefinition } from "vscode"
74
85interface TaskProviderBase extends vscode . TaskProvider {
96 createTask ( ) : vscode . Task
107
11- isAvailable ( ) : boolean
8+ isAvailable ( ) : Promise < boolean >
129
1310 readonly taskType : string
1411}
@@ -26,13 +23,13 @@ export class BlueprintTaskProvider implements TaskProviderBase {
2623 this . group = group
2724 }
2825
29- public provideTasks ( ) : vscode . Task [ ] {
30- const isAvailable = this . isAvailable ( )
26+ public async provideTasks ( ) : Promise < vscode . Task [ ] > {
27+ const isAvailable = await this . isAvailable ( )
3128 if ( ! isAvailable ) return [ ]
3229 return [ this . createTask ( ) ]
3330 }
3431
35- public isAvailable ( ) : boolean {
32+ public async isAvailable ( ) : Promise < boolean > {
3633 return projectUsesBlueprint ( )
3734 }
3835
@@ -45,7 +42,7 @@ export class BlueprintTaskProvider implements TaskProviderBase {
4542 }
4643
4744 public createTask ( ) : vscode . Task {
48- const definition : TaskDefinition = {
45+ const definition : vscode . TaskDefinition = {
4946 type : this . taskType ,
5047 }
5148
@@ -88,12 +85,12 @@ export class TactTemplateTaskProvider implements TaskProviderBase {
8885 this . group = group
8986 }
9087
91- public isAvailable ( ) : boolean {
92- return ! projectUsesBlueprint ( )
88+ public async isAvailable ( ) : Promise < boolean > {
89+ return ! ( await projectUsesBlueprint ( ) )
9390 }
9491
95- public provideTasks ( ) : vscode . Task [ ] {
96- const isAvailable = this . isAvailable ( )
92+ public async provideTasks ( ) : Promise < vscode . Task [ ] > {
93+ const isAvailable = await this . isAvailable ( )
9794 if ( ! isAvailable ) return [ ]
9895 return [ this . createTask ( ) ]
9996 }
@@ -107,7 +104,7 @@ export class TactTemplateTaskProvider implements TaskProviderBase {
107104 }
108105
109106 public createTask ( ) : vscode . Task {
110- const definition : TaskDefinition = {
107+ const definition : vscode . TaskDefinition = {
111108 type : this . taskType ,
112109 }
113110
@@ -137,19 +134,22 @@ export class TactTemplateTaskProvider implements TaskProviderBase {
137134 }
138135}
139136
140- function registerTaskProvider ( context : vscode . ExtensionContext , provider : TaskProviderBase ) : void {
141- if ( ! provider . isAvailable ( ) ) return
137+ async function registerTaskProvider (
138+ context : vscode . ExtensionContext ,
139+ provider : TaskProviderBase ,
140+ ) : Promise < void > {
141+ if ( ! ( await provider . isAvailable ( ) ) ) return
142142
143143 const taskProviderDisposable = vscode . tasks . registerTaskProvider ( provider . taskType , provider )
144144 context . subscriptions . push ( taskProviderDisposable )
145145}
146146
147- export function registerBuildTasks ( context : vscode . ExtensionContext ) : void {
148- registerTaskProvider (
147+ export async function registerBuildTasks ( context : vscode . ExtensionContext ) : Promise < void > {
148+ await registerTaskProvider (
149149 context ,
150150 new BlueprintTaskProvider ( "build" , "build" , "npx blueprint build" , vscode . TaskGroup . Build ) ,
151151 )
152- registerTaskProvider (
152+ await registerTaskProvider (
153153 context ,
154154 new BlueprintTaskProvider (
155155 "build-all" ,
@@ -158,11 +158,11 @@ export function registerBuildTasks(context: vscode.ExtensionContext): void {
158158 vscode . TaskGroup . Build ,
159159 ) ,
160160 )
161- registerTaskProvider (
161+ await registerTaskProvider (
162162 context ,
163163 new BlueprintTaskProvider ( "test" , "test" , "npx blueprint test" , vscode . TaskGroup . Test ) ,
164164 )
165- registerTaskProvider (
165+ await registerTaskProvider (
166166 context ,
167167 new BlueprintTaskProvider (
168168 "build-and-test-all" ,
@@ -171,15 +171,15 @@ export function registerBuildTasks(context: vscode.ExtensionContext): void {
171171 vscode . TaskGroup . Build ,
172172 ) ,
173173 )
174- registerTaskProvider (
174+ await registerTaskProvider (
175175 context ,
176176 new TactTemplateTaskProvider ( "build" , "build" , "yarn build" , vscode . TaskGroup . Build ) ,
177177 )
178- registerTaskProvider (
178+ await registerTaskProvider (
179179 context ,
180180 new TactTemplateTaskProvider ( "test" , "test" , "yarn test" , vscode . TaskGroup . Test ) ,
181181 )
182- registerTaskProvider (
182+ await registerTaskProvider (
183183 context ,
184184 new TactTemplateTaskProvider (
185185 "build-and-test" ,
@@ -208,14 +208,15 @@ export function registerBuildTasks(context: vscode.ExtensionContext): void {
208208 )
209209}
210210
211- function projectUsesBlueprint ( ) : boolean {
211+ async function projectUsesBlueprint ( ) : Promise < boolean > {
212212 const workspaceFolders = vscode . workspace . workspaceFolders
213213 if ( ! workspaceFolders || workspaceFolders . length === 0 ) return false
214214
215- const packageJsonPath = path . join ( workspaceFolders [ 0 ] . uri . fsPath , "package.json" )
216-
217215 try {
218- const packageJson = JSON . parse ( fs . readFileSync ( packageJsonPath , "utf8" ) ) as {
216+ const packageJsonContent = await vscode . workspace . fs . readFile (
217+ vscode . Uri . joinPath ( workspaceFolders [ 0 ] . uri , "package.json" ) ,
218+ )
219+ const packageJson = JSON . parse ( new TextDecoder ( ) . decode ( packageJsonContent ) ) as {
219220 dependencies ?: Record < string , unknown >
220221 devDependencies ?: Record < string , unknown >
221222 }
0 commit comments