From 703bb36070ecc7ea4922b2fdd093461027a00cb8 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 14 Aug 2016 22:15:41 -0700 Subject: [PATCH] Added automatic .d.ts typings copying Fixes #6. --- src/definitions.ts | 7 ++++++- src/setup/.gitignore | 2 ++ src/tasks/setup.ts | 13 +++++++----- src/tasks/setup/clean.ts | 5 +++-- src/tasks/setup/copy.ts | 2 +- src/tasks/setup/typings.ts | 43 ++++++++++++++++++++++++++++++++++++++ tsconfig.json | 1 + 7 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 src/tasks/setup/typings.ts diff --git a/src/definitions.ts b/src/definitions.ts index 8ed8a86..c35cc52 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -146,7 +146,12 @@ export const Constants = { /** * Location of all test code. */ - test: "test" + test: "test", + + /** + * Location of TypeScript typings. + */ + typings: "typings" }, /** diff --git a/src/setup/.gitignore b/src/setup/.gitignore index c651a34..9ef562b 100644 --- a/src/setup/.gitignore +++ b/src/setup/.gitignore @@ -6,5 +6,7 @@ test/**/*.js test/index.html test/utils/** !test/utils/mocks.ts +typings/** +!typings/.gitignore node_modules/ npm-debug.log diff --git a/src/tasks/setup.ts b/src/tasks/setup.ts index f91d515..454490e 100644 --- a/src/tasks/setup.ts +++ b/src/tasks/setup.ts @@ -6,11 +6,14 @@ import { IGulpSettings } from "../definitions"; export default function (settings: IGulpSettings, callback: Function): void { "use strict"; - const tasks: string[] = [ - "setup:clean", - "setup:copy", - "setup:package" + const tasks: string[][] = [ + ["setup:clean"], + [ + "setup:copy", + "setup:package", + "setup:typings" + ] ]; - require("run-sequence").use(settings.gulp)(tasks, callback); + require("run-sequence").use(settings.gulp)(...tasks, callback); } diff --git a/src/tasks/setup/clean.ts b/src/tasks/setup/clean.ts index 251cda0..e614d76 100644 --- a/src/tasks/setup/clean.ts +++ b/src/tasks/setup/clean.ts @@ -2,13 +2,14 @@ const del: any = require("del"); import { Constants } from "../../definitions"; /** - * Deletes all built files. + * Deletes all generated files. */ export default function (): any { "use strict"; return del([ `${Constants.folders.lib}/**/*`, - `${Constants.folders.src}/**/*.js` + `${Constants.folders.src}/**/*.js`, + `${Constants.folders.typings}/**/*` ]); } diff --git a/src/tasks/setup/copy.ts b/src/tasks/setup/copy.ts index 28abceb..787c19c 100644 --- a/src/tasks/setup/copy.ts +++ b/src/tasks/setup/copy.ts @@ -5,7 +5,7 @@ import { IGulpSettings } from "../../definitions"; /** * Deletes all built files. */ -export default function taskClean(settings: IGulpSettings): any { +export default function (settings: IGulpSettings): any { "use strict"; return settings.gulp diff --git a/src/tasks/setup/typings.ts b/src/tasks/setup/typings.ts new file mode 100644 index 0000000..4c961b4 --- /dev/null +++ b/src/tasks/setup/typings.ts @@ -0,0 +1,43 @@ +const fs: any = require("fs"); +import { Constants, IExternal, IGulpSettings } from "../../definitions"; + +/** + * Collects required typings files for a shenanigans project. + * + * @param settings Settings for a shenanigans project. + * @returns Required typings file names, keyed to their location. + */ +function collectTypingsFiles(settings: IGulpSettings): { [i: string]: string } { + "use strict"; + + const files: { [i: string]: string } = {}; + + for (const dependency of Object.keys(settings.dependencies)) { + files[dependency] = `node_modules/${dependency}/lib/${dependency}.d.ts`; + } + + for (const i in settings.externals) { + if (!settings.externals.hasOwnProperty(i)) { + continue; + } + + const external: IExternal = settings.externals[i]; + files[external.typing] = `node_modules/@types/${external.typing}/index.d.ts`; + } + + return files; +} + +/** + * Copies typings files into the typings directory. + */ +export default function (settings: IGulpSettings): any { + "use strict"; + + const files: { [i: string]: string } = collectTypingsFiles(settings); + + for (const file of Object.keys(files)) { + fs.createReadStream(files[file]) + .pipe(fs.createWriteStream(`${Constants.folders.typings}/${file}.d.ts`)); + } +} diff --git a/tsconfig.json b/tsconfig.json index fb059d6..2842c58 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,7 @@ "src/tasks/setup/clean.ts", "src/tasks/setup/copy.ts", "src/tasks/setup/package.ts", + "src/tasks/setup/typings.ts", "src/tasks/src/tsc.ts", "src/tasks/src/tslint.ts", "src/tasks/test/run.ts",