From b7bdc7256c53978e56b335af0ac93ad4ff56f2a4 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Tue, 28 Jul 2026 17:30:31 -0300 Subject: [PATCH] chore(doctor): replace grunt with npm scripts and build to dist Grunt's tasks were thin wrappers around tsc, npm test and npm pack: - ts:devsrc -> tsc - ts:devall -> tsc -p tsconfig.test.json - ts:release_build -> tsc -p tsconfig.release.json - clean -> scripts/clean.js - watch:ts -> tsc --watch - shell:npm_test -> npm test - tslint:build -> dropped The lint task was already failing with 6 errors, was not wired into build, test, prepack or CI, and tslint itself is deprecated; .ts files here are covered by the repo-wide prettier lint-staged hook instead. Dropping grunt-tslint also resolves the ERESOLVE that made npm install in this package require --legacy-peer-deps, so the .npmrc pinning legacy-peer-deps=true goes away too. Compilation moves out of the source tree: src/ now builds to dist/ with declarations, and the test build goes to dist-test/. dist/ sits at the same depth as src/ did, so the __dirname/../resources lookup in sys-info is unaffected. package.json main follows the output; types keeps pointing at the hand-written typings/, which is the package's public contract and also supplies the global NativeScriptDoctor namespace the CLI depends on. typings/interfaces.ts becomes a .d.ts so that it stops emitting an empty JS file and stops dragging rootDir up to the package root. istanbul is dropped along with it: nothing consumed the coverage report, and it is unmaintained. Grunt read tsconfig.json with grunt.file.readJSON, which does not resolve "extends", so it compiled with tsc defaults rather than the repo's compiler options. Running tsc for real surfaces some dead code that noUnusedLocals rejects, removed here. --- packages/doctor/.gitignore | 9 +- packages/doctor/.npmrc | 1 - packages/doctor/Gruntfile.js | 91 ------------------- packages/doctor/package.json | 26 ++---- packages/doctor/scripts/clean.js | 30 ++++++ packages/doctor/scripts/copy-test-fixtures.js | 11 +++ packages/doctor/src/android-tools-info.ts | 16 ---- packages/doctor/src/doctor.ts | 44 +++++---- packages/doctor/src/index.ts | 11 +-- packages/doctor/test/sys-info.ts | 10 +- packages/doctor/test/wrappers/file-system.ts | 2 +- packages/doctor/tsconfig.json | 6 +- packages/doctor/tsconfig.release.json | 7 ++ packages/doctor/tsconfig.test.json | 9 ++ packages/doctor/tslint.json | 73 --------------- .../{interfaces.ts => interfaces.d.ts} | 0 .../doctor/typings/nativescript-doctor.d.ts | 2 +- 17 files changed, 105 insertions(+), 243 deletions(-) delete mode 100644 packages/doctor/.npmrc delete mode 100644 packages/doctor/Gruntfile.js create mode 100644 packages/doctor/scripts/clean.js create mode 100644 packages/doctor/scripts/copy-test-fixtures.js create mode 100644 packages/doctor/tsconfig.release.json create mode 100644 packages/doctor/tsconfig.test.json delete mode 100644 packages/doctor/tslint.json rename packages/doctor/typings/{interfaces.ts => interfaces.d.ts} (100%) diff --git a/packages/doctor/.gitignore b/packages/doctor/.gitignore index 46df90d80d..544644a725 100644 --- a/packages/doctor/.gitignore +++ b/packages/doctor/.gitignore @@ -17,9 +17,6 @@ coverage # nyc test coverage .nyc_output -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - # node-waf configuration .lock-wscript @@ -64,6 +61,8 @@ test-reports.xml *.js *.js.map -/src/.d.ts -.d.ts !/*.js +!/scripts/*.js + +/dist/ +/dist-test/ diff --git a/packages/doctor/.npmrc b/packages/doctor/.npmrc deleted file mode 100644 index 521a9f7c07..0000000000 --- a/packages/doctor/.npmrc +++ /dev/null @@ -1 +0,0 @@ -legacy-peer-deps=true diff --git a/packages/doctor/Gruntfile.js b/packages/doctor/Gruntfile.js deleted file mode 100644 index b24e5bc02c..0000000000 --- a/packages/doctor/Gruntfile.js +++ /dev/null @@ -1,91 +0,0 @@ -module.exports = function (grunt) { - grunt.initConfig({ - ts: { - options: grunt.file.readJSON("tsconfig.json").compilerOptions, - - devsrc: { - src: ["src/**/*.ts", "typings/**/*.ts"], - reference: "src/.d.ts", - }, - - devall: { - src: ["src/**/*.ts", "test/**/*.ts", "typings/**/*.ts"], - reference: "src/.d.ts", - }, - - release_build: { - src: ["src/**/*.ts", "test/**/*.ts", "typings/**/*.ts"], - reference: "src/.d.ts", - options: { - sourceMap: false, - removeComments: true, - }, - }, - }, - - tslint: { - build: { - files: { - src: ["src/**/*.ts", "test/**/*.ts", "typings/**/*.ts", "!**/*.d.ts"], - }, - options: { - configuration: grunt.file.readJSON("./tslint.json"), - project: "tsconfig.json", - }, - }, - }, - - watch: { - devall: { - files: ["src/**/*.ts", "test/**/*.ts"], - tasks: ["ts:devall", "shell:npm_test"], - options: { - atBegin: true, - interrupt: true, - }, - }, - ts: { - files: ["src/**/*.ts", "test/**/*.ts"], - tasks: ["ts:devall"], - options: { - atBegin: true, - interrupt: true, - }, - }, - }, - - shell: { - options: { - stdout: true, - stderr: true, - failOnError: true, - }, - npm_test: { - command: "npm test", - }, - }, - - clean: { - src: [ - "test/**/*.js*", - "src/**/*.js*", - "!src/hooks/**/*.js", - "!Gruntfile.js", - "*.tgz", - ], - }, - }); - - grunt.loadNpmTasks("grunt-contrib-clean"); - grunt.loadNpmTasks("grunt-contrib-watch"); - grunt.loadNpmTasks("grunt-shell"); - grunt.loadNpmTasks("grunt-ts"); - grunt.loadNpmTasks("grunt-tslint"); - - grunt.registerTask("test", ["ts:devall", "shell:npm_test"]); - grunt.registerTask("pack", ["clean", "ts:release_build", "shell:npm_test"]); - grunt.registerTask("lint", ["tslint:build"]); - grunt.registerTask("all", ["clean", "test", "lint"]); - grunt.registerTask("rebuild", ["clean", "ts:devsrc"]); - grunt.registerTask("default", "ts:devsrc"); -}; diff --git a/packages/doctor/package.json b/packages/doctor/package.json index 50bff723d6..ff679baa88 100644 --- a/packages/doctor/package.json +++ b/packages/doctor/package.json @@ -2,21 +2,24 @@ "name": "@nativescript/doctor", "version": "2.0.17", "description": "Library that helps identifying if the environment can be used for development of {N} apps.", - "main": "src/index.js", + "main": "dist/index.js", "types": "./typings/nativescript-doctor.d.ts", "files": [ - "src/**/*.js", + "dist/**/*.js", + "dist/**/*.d.ts", "resources", "typings", "CHANGELOG.md", "NOTICE.txt" ], "scripts": { - "clean": "npx rimraf node_modules package-lock.json && npm i && grunt clean", - "build": "grunt", - "build.all": "grunt ts:devall", - "prepack": "grunt pack", - "test": "istanbul cover ./node_modules/mocha/bin/_mocha -- --recursive", + "clean": "npx rimraf node_modules package-lock.json && npm i && npm run clean.build", + "clean.build": "node scripts/clean.js", + "build": "tsc", + "build.all": "tsc -p tsconfig.test.json && node scripts/copy-test-fixtures.js", + "dev": "tsc --watch", + "prepack": "npm run clean.build && npm test && tsc -p tsconfig.release.json", + "test": "npm run build.all && mocha --recursive dist-test/test", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "repository": { @@ -51,17 +54,8 @@ "@types/yauzl": "2.10.3", "chai": "5.3.3", "conventional-changelog-cli": "^5.0.0", - "grunt": "1.6.1", - "grunt-contrib-clean": "2.0.1", - "grunt-contrib-watch": "1.1.0", - "grunt-shell": "4.0.0", - "grunt-ts": "6.0.0-beta.22", - "grunt-tslint": "5.0.2", - "istanbul": "0.4.5", "mocha": "11.7.5", "rimraf": "6.1.2", - "tslint": "6.1.3", - "tslint-microsoft-contrib": "6.2.0", "typescript": "~5.9.2" }, "dependencies": { diff --git a/packages/doctor/scripts/clean.js b/packages/doctor/scripts/clean.js new file mode 100644 index 0000000000..a48e5cca57 --- /dev/null +++ b/packages/doctor/scripts/clean.js @@ -0,0 +1,30 @@ +const child_process = require("child_process"); +const fs = require("fs"); +const path = require("path"); + +const rootDir = path.join(__dirname, ".."); + +// Older checkouts compiled next to the sources; .gitignore is the source of +// truth for which files under src/ and test/ are leftover compiler output. +const result = child_process.spawnSync("git", ["clean", "-Xdf", "src", "test"], { + cwd: rootDir, + stdio: "inherit", +}); + +if (result.error) { + throw result.error; +} + +if (result.status !== 0) { + throw new Error(`git clean exited with status ${result.status}`); +} + +for (const dir of ["dist", "dist-test", "coverage"]) { + fs.rmSync(path.join(rootDir, dir), { recursive: true, force: true }); +} + +for (const entry of fs.readdirSync(rootDir)) { + if (entry.endsWith(".tgz")) { + fs.rmSync(path.join(rootDir, entry)); + } +} diff --git a/packages/doctor/scripts/copy-test-fixtures.js b/packages/doctor/scripts/copy-test-fixtures.js new file mode 100644 index 0000000000..7585cca110 --- /dev/null +++ b/packages/doctor/scripts/copy-test-fixtures.js @@ -0,0 +1,11 @@ +const fs = require("fs"); +const path = require("path"); + +const rootDir = path.join(__dirname, ".."); + +// The tests resolve fixtures relative to __dirname, so they have to sit next to +// the compiled test files rather than in the source tree. +fs.cpSync(path.join(rootDir, "test"), path.join(rootDir, "dist-test", "test"), { + recursive: true, + filter: (src) => !src.endsWith(".ts"), +}); diff --git a/packages/doctor/src/android-tools-info.ts b/packages/doctor/src/android-tools-info.ts index a9136d9804..6e339a2d39 100644 --- a/packages/doctor/src/android-tools-info.ts +++ b/packages/doctor/src/android-tools-info.ts @@ -658,20 +658,4 @@ export class AndroidToolsInfo implements NativeScriptDoctor.IAndroidToolsInfo { this._cachedRuntimeVersion = runtimeVersion; return runtimeVersion; } - - private getMaxSupportedCompileVersion( - config: Partial & { - runtimeVersion?: string; - }, - ): number { - if ( - config.runtimeVersion && - semver.lt(semver.coerce(config.runtimeVersion), "6.1.0") - ) { - return 28; - } - return this.parseAndroidSdkString( - _.last(this.getSupportedTargets(config.projectDir).sort()), - ); - } } diff --git a/packages/doctor/src/doctor.ts b/packages/doctor/src/doctor.ts index 3fc13bae78..5557fd6777 100644 --- a/packages/doctor/src/doctor.ts +++ b/packages/doctor/src/doctor.ts @@ -3,7 +3,6 @@ import { EOL } from "os"; import { HostInfo } from "./host-info"; import { AndroidLocalBuildRequirements } from "./local-build-requirements/android-local-build-requirements"; import { IosLocalBuildRequirements } from "./local-build-requirements/ios-local-build-requirements"; -import { Helpers } from "./helpers"; import * as semver from "semver"; export class Doctor implements NativeScriptDoctor.IDoctor { @@ -11,17 +10,16 @@ export class Doctor implements NativeScriptDoctor.IDoctor { constructor( private androidLocalBuildRequirements: AndroidLocalBuildRequirements, - private helpers: Helpers, private hostInfo: HostInfo, private iOSLocalBuildRequirements: IosLocalBuildRequirements, private sysInfo: NativeScriptDoctor.ISysInfo, - private androidToolsInfo: NativeScriptDoctor.IAndroidToolsInfo + private androidToolsInfo: NativeScriptDoctor.IAndroidToolsInfo, ) {} public async canExecuteLocalBuild( platform: string, projectDir?: string, - runtimeVersion?: string + runtimeVersion?: string, ): Promise { this.validatePlatform(platform); @@ -30,7 +28,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { ) { return await this.androidLocalBuildRequirements.checkRequirements( projectDir, - runtimeVersion + runtimeVersion, ); } else if ( platform.toLowerCase() === Constants.IOS_PLATFORM_NAME.toLowerCase() @@ -42,7 +40,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { } public async getInfos( - config?: NativeScriptDoctor.ISysInfoConfig + config?: NativeScriptDoctor.ISysInfoConfig, ): Promise { let result: NativeScriptDoctor.IInfo[] = []; const sysInfoData = await this.sysInfo.getSysInfo(config); @@ -57,8 +55,8 @@ export class Doctor implements NativeScriptDoctor.IDoctor { this.getAndroidInfos( sysInfoData, config && config.projectDir, - config && config.androidRuntimeVersion - ) + config && config.androidRuntimeVersion, + ), ); } @@ -85,7 +83,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { } public async getWarnings( - config?: NativeScriptDoctor.ISysInfoConfig + config?: NativeScriptDoctor.ISysInfoConfig, ): Promise { const info = await this.getInfos(config); return info @@ -96,7 +94,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { private getAndroidInfos( sysInfoData: NativeScriptDoctor.ISysInfoData, projectDir?: string, - runtimeVersion?: string + runtimeVersion?: string, ): NativeScriptDoctor.IInfo[] { let result: NativeScriptDoctor.IInfo[] = []; @@ -144,7 +142,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { warnings: this.androidToolsInfo.validateJavacVersion( sysInfoData.javacVersion, projectDir, - runtimeVersion + runtimeVersion, ), infoMessage: "Javac is installed and is configured properly.", platforms: [Constants.ANDROID_PLATFORM_NAME], @@ -164,14 +162,14 @@ export class Doctor implements NativeScriptDoctor.IDoctor { EOL + "described in http://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html (for JDK 8).", platforms: [Constants.ANDROID_PLATFORM_NAME], - }) + }), ); return result; } private async getiOSInfos( - sysInfoData: NativeScriptDoctor.ISysInfoData + sysInfoData: NativeScriptDoctor.ISysInfoData, ): Promise { let result: NativeScriptDoctor.IInfo[] = []; if (this.hostInfo.isDarwin) { @@ -216,7 +214,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { warningMessage: "CocoaPods update required.", additionalInformation: `You are using CocoaPods version ${sysInfoData.cocoaPodsVer} which does not support Xcode ${sysInfoData.xcodeVer} yet.${EOL}${EOL}You can update your cocoapods by running $sudo gem install cocoapods from a terminal.${EOL}${EOL}In order for the NativeScript CLI to be able to work correctly with this setup you need to install xcproj command line tool and add it to your PATH.Xcproj can be installed with homebrew by running $ brew install xcproj from the terminal`, platforms: [Constants.IOS_PLATFORM_NAME], - }) + }), ); if (sysInfoData.xcodeVer && sysInfoData.cocoaPodsVer) { @@ -230,7 +228,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { additionalInformation: "Verify that CocoaPods are configured properly.", platforms: [Constants.IOS_PLATFORM_NAME], - }) + }), ); } @@ -241,7 +239,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { !semver.valid(sysInfoData.cocoaPodsVer) || !semver.lt( sysInfoData.cocoaPodsVer, - Doctor.MIN_SUPPORTED_POD_VERSION + Doctor.MIN_SUPPORTED_POD_VERSION, ), infoMessage: `Your current CocoaPods version is newer than ${Doctor.MIN_SUPPORTED_POD_VERSION}.`, warningMessage: `Your current CocoaPods version is earlier than ${Doctor.MIN_SUPPORTED_POD_VERSION}.`, @@ -260,7 +258,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { EOL + `Error while validating Python packages. Error is: ${sysInfoData.pythonInfo.installationErrorMessage}`, platforms: [Constants.IOS_PLATFORM_NAME], - }) + }), ); if (sysInfoData.xcodeVer) { @@ -272,7 +270,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { additionalInformation: "To build your application for iOS, update your Xcode.", platforms: [Constants.IOS_PLATFORM_NAME], - }) + }), ); } } @@ -322,7 +320,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { } private convertWarningToInfo( - warning: NativeScriptDoctor.IWarning + warning: NativeScriptDoctor.IWarning, ): NativeScriptDoctor.IInfo { return { message: warning.warning, @@ -333,7 +331,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { } private convertInfoToWarning( - info: NativeScriptDoctor.IInfo + info: NativeScriptDoctor.IInfo, ): NativeScriptDoctor.IWarning { return { warning: info.message, @@ -345,7 +343,7 @@ export class Doctor implements NativeScriptDoctor.IDoctor { private isPlatformSupported(platform: string): boolean { return ( Constants.SUPPORTED_PLATFORMS.map((pl) => pl.toLowerCase()).indexOf( - platform.toLowerCase() + platform.toLowerCase(), ) !== -1 ); } @@ -358,8 +356,8 @@ export class Doctor implements NativeScriptDoctor.IDoctor { if (!this.isPlatformSupported(platform)) { throw new Error( `Platform ${platform} is not supported.The supported platforms are: ${Constants.SUPPORTED_PLATFORMS.join( - ", " - )} ` + ", ", + )} `, ); } } diff --git a/packages/doctor/src/index.ts b/packages/doctor/src/index.ts index dfc57bc065..b1a9a7fb90 100644 --- a/packages/doctor/src/index.ts +++ b/packages/doctor/src/index.ts @@ -19,7 +19,7 @@ const androidToolsInfo = new AndroidToolsInfo( childProcess, fileSystem, hostInfo, - helpers + helpers, ); const sysInfo: NativeScriptDoctor.ISysInfo = new SysInfo( @@ -28,25 +28,24 @@ const sysInfo: NativeScriptDoctor.ISysInfo = new SysInfo( helpers, hostInfo, winReg, - androidToolsInfo + androidToolsInfo, ); const androidLocalBuildRequirements = new AndroidLocalBuildRequirements( androidToolsInfo, - sysInfo + sysInfo, ); const iOSLocalBuildRequirements = new IosLocalBuildRequirements( sysInfo, - hostInfo + hostInfo, ); const doctor: NativeScriptDoctor.IDoctor = new Doctor( androidLocalBuildRequirements, - helpers, hostInfo, iOSLocalBuildRequirements, sysInfo, - androidToolsInfo + androidToolsInfo, ); const setShouldCacheSysInfo = sysInfo.setShouldCacheSysInfo.bind(sysInfo); diff --git a/packages/doctor/test/sys-info.ts b/packages/doctor/test/sys-info.ts index f2b6d24d59..2d3c64ea9b 100644 --- a/packages/doctor/test/sys-info.ts +++ b/packages/doctor/test/sys-info.ts @@ -229,7 +229,6 @@ describe("SysInfo unit tests", () => { }); describe("Should execute correct commands to check for", () => { - let spawnFromEventCommand: string; let execCommands: string[] = []; let fileSystem: any; let hostInfo: any; @@ -237,12 +236,7 @@ describe("SysInfo unit tests", () => { beforeEach(() => { execCommands = []; const childProcess: ChildProcess = { - spawnFromEvent: async ( - command: string, - args: string[], - event: string, - ) => { - spawnFromEventCommand = `${command} ${args.join(" ")}`; + spawnFromEvent: async () => { return { stdout: "", stderr: "" }; }, exec: async (command: string) => { @@ -971,7 +965,7 @@ Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)`), const fileSystem: any = { exists: () => true, extractZip: () => Promise.resolve(), - readDirectory: () => [], + readDirectory: (): string[] => [], appendFile: (filePath: string, text: string) => { appendedFiles.push({ filePath, text }); return true; diff --git a/packages/doctor/test/wrappers/file-system.ts b/packages/doctor/test/wrappers/file-system.ts index f58cea8a72..86c4ae82fe 100644 --- a/packages/doctor/test/wrappers/file-system.ts +++ b/packages/doctor/test/wrappers/file-system.ts @@ -1,6 +1,6 @@ import { tmpdir } from "os"; import { assert } from "chai"; -import { rimraf, rimrafSync } from "rimraf"; +import { rimrafSync } from "rimraf"; import { FileSystem } from "../../src/wrappers/file-system"; diff --git a/packages/doctor/tsconfig.json b/packages/doctor/tsconfig.json index 3e110d9f3a..baec4941ce 100644 --- a/packages/doctor/tsconfig.json +++ b/packages/doctor/tsconfig.json @@ -1,11 +1,13 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "skipLibCheck": true + "skipLibCheck": true, + "rootDir": "src", + "outDir": "dist", + "declaration": true }, "include": [ "src/", - "test/", "typings/" ] } diff --git a/packages/doctor/tsconfig.release.json b/packages/doctor/tsconfig.release.json new file mode 100644 index 0000000000..065b45aa74 --- /dev/null +++ b/packages/doctor/tsconfig.release.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "sourceMap": false, + "removeComments": true + } +} diff --git a/packages/doctor/tsconfig.test.json b/packages/doctor/tsconfig.test.json new file mode 100644 index 0000000000..9ecda5281f --- /dev/null +++ b/packages/doctor/tsconfig.test.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "dist-test", + "declaration": false + }, + "include": ["src/", "test/", "typings/"] +} diff --git a/packages/doctor/tslint.json b/packages/doctor/tslint.json deleted file mode 100644 index 5386dd58d9..0000000000 --- a/packages/doctor/tslint.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "rulesDirectory": "node_modules/tslint-microsoft-contrib", - "rules": { - "class-name": true, - "curly": true, - "eofline": true, - "mocha-avoid-only": true, - "indent": [ - true, - "tabs" - ], - "interface-name": true, - "jsdoc-format": true, - "max-line-length": [ - false, - 140 - ], - "prefer-const": true, - "no-consecutive-blank-lines": true, - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-shadowed-variable": true, - "no-empty": true, - "no-eval": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "no-var-requires": false, - "one-line": [ - true, - "check-catch", - "check-finally", - "check-else", - "check-open-brace", - "check-whitespace" - ], - "no-floating-promises": true, - "quotemark": [ - false, - "double" - ], - "semicolon": true, - "space-before-function-paren": false, - "switch-default": false, - "trailing-comma": [ - false, - { - "multiline": "always", - "singleline": "always" - } - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "use-isnan": true, - "variable-name": [ - true, - "ban-keywords", - "allow-leading-underscore" - ], - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-module", - "check-separator" - ] - } -} \ No newline at end of file diff --git a/packages/doctor/typings/interfaces.ts b/packages/doctor/typings/interfaces.d.ts similarity index 100% rename from packages/doctor/typings/interfaces.ts rename to packages/doctor/typings/interfaces.d.ts diff --git a/packages/doctor/typings/nativescript-doctor.d.ts b/packages/doctor/typings/nativescript-doctor.d.ts index b0bbc8f08b..580919f7a0 100644 --- a/packages/doctor/typings/nativescript-doctor.d.ts +++ b/packages/doctor/typings/nativescript-doctor.d.ts @@ -1,4 +1,4 @@ -/// +/// declare module "@nativescript/doctor" { export const doctor: NativeScriptDoctor.IDoctor;