diff --git a/package-lock.json b/package-lock.json index 4ee611a..d981a01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@dojo/cli-export-project", - "version": "0.1.0", + "version": "0.1.1-beta3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -34,7 +34,7 @@ "integrity": "sha1-qHGcQXsIDAEtNJeyjiKKwJdF/fI=", "dev": true, "requires": { - "@types/node": "6.0.88" + "@types/node": "6.0.89" } }, "@types/glob": { @@ -44,7 +44,7 @@ "dev": true, "requires": { "@types/minimatch": "3.0.1", - "@types/node": "6.0.88" + "@types/node": "6.0.89" } }, "@types/grunt": { @@ -53,7 +53,7 @@ "integrity": "sha512-fKrWJ+uFq9j3tP2RLm9cY7Z50LhhPnSHQCliCZP5lPAWC7TydnU+BcLR0KQIHe9Gbn1oGfkRIq3u56MNCC1qyw==", "dev": true, "requires": { - "@types/node": "6.0.88" + "@types/node": "6.0.89" } }, "@types/handlebars": { @@ -93,9 +93,9 @@ "dev": true }, "@types/node": { - "version": "6.0.88", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz", - "integrity": "sha512-bYDPZTX0/s1aihdjLuAgogUAT5M+TpoWChEMea2p0yOcfn5bu3k6cJb9cp6nw268XeSNIGGr+4+/8V5K6BGzLQ==", + "version": "6.0.89", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.89.tgz", + "integrity": "sha512-Z/67L97+6H1qJiEEHSN1SQapkWjDss1D90rAnFcQ6UxKkah9juzotK5UNEP1bDv/0lJ3NAQTnVfc/JWdgCGruA==", "dev": true }, "@types/shelljs": { @@ -104,7 +104,7 @@ "integrity": "sha1-32E73biCJe0JzlyDX2INyq8VXms=", "dev": true, "requires": { - "@types/node": "6.0.88" + "@types/node": "6.0.89" } }, "@types/sinon": { @@ -294,7 +294,7 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000744", + "caniuse-db": "1.0.30000746", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -500,8 +500,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000744", - "electron-to-chromium": "1.3.24" + "caniuse-db": "1.0.30000746", + "electron-to-chromium": "1.3.26" } }, "buffer-crc32": { @@ -600,15 +600,15 @@ "dev": true, "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000744", + "caniuse-db": "1.0.30000746", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" } }, "caniuse-db": { - "version": "1.0.30000744", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000744.tgz", - "integrity": "sha1-AHWP991fcTjTShVgjcz3Glllb/4=", + "version": "1.0.30000746", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000746.tgz", + "integrity": "sha1-UBCYxm9fu/Y0wC8lUIsF6ICZEPQ=", "dev": true }, "capture-stack-trace": { @@ -951,9 +951,9 @@ } }, "css-color-function": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.2.tgz", - "integrity": "sha1-S6Pokv7peUZE5rDh/R33gRzXVQI=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz", + "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=", "dev": true, "requires": { "balanced-match": "0.1.0", @@ -1476,9 +1476,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.24", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.24.tgz", - "integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=", + "version": "1.3.26", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz", + "integrity": "sha1-mWQnKUhhp02cfIK5Jg6jAejALWY=", "dev": true }, "emojis-list": { @@ -2047,6 +2047,15 @@ } } }, + "global-dirs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.0.tgz", + "integrity": "sha1-ENNAOeDfBCcuJizyQiT3IJQ0308=", + "dev": true, + "requires": { + "ini": "1.3.4" + } + }, "globule": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", @@ -2202,9 +2211,9 @@ } }, "grunt-dojo2": { - "version": "2.0.0-beta2.4", - "resolved": "https://registry.npmjs.org/grunt-dojo2/-/grunt-dojo2-2.0.0-beta2.4.tgz", - "integrity": "sha512-lWak4E+LHGqhCltXH+z7G22Chvij9eOW9X/j8PdaJdEwqIBgdDslncWtef5D0Ng9Na4etJmNmM5bG5BDs+RFYg==", + "version": "2.0.0-beta2.7", + "resolved": "https://registry.npmjs.org/grunt-dojo2/-/grunt-dojo2-2.0.0-beta2.7.tgz", + "integrity": "sha512-cLWcCZBX0nXtmxHxT1ymkIImO56SHINio07dTtQEwfL+Ese0J4/iwvyJrUZohw63hioA6jdhpvS1qBNkZ92xNQ==", "dev": true, "requires": { "codecov.io": "0.1.6", @@ -2970,6 +2979,16 @@ "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", "dev": true }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "0.1.0", + "is-path-inside": "1.0.0" + } + }, "is-natural-number": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", @@ -2997,6 +3016,15 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -4144,6 +4172,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", @@ -4374,7 +4408,7 @@ "integrity": "sha1-mtIm9VDop8f4uKd4YFRbbdf1UkE=", "dev": true, "requires": { - "css-color-function": "1.3.2", + "css-color-function": "1.3.3", "postcss": "5.2.18", "postcss-message-helpers": "2.0.0", "postcss-value-parser": "3.3.0" @@ -5208,9 +5242,9 @@ } }, "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", "dev": true, "requires": { "deep-extend": "0.4.2", @@ -5419,7 +5453,7 @@ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", "dev": true, "requires": { - "rc": "1.2.1", + "rc": "1.2.2", "safe-buffer": "5.1.1" } }, @@ -5429,7 +5463,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.1" + "rc": "1.2.2" } }, "regjsgen": { @@ -6247,19 +6281,19 @@ "requires": { "babel-code-frame": "6.26.0", "colors": "1.1.2", - "diff": "3.3.1", + "diff": "3.4.0", "findup-sync": "0.3.0", "glob": "7.1.2", "optimist": "0.6.1", "resolve": "1.1.7", "tsutils": "1.9.1", - "update-notifier": "2.2.0" + "update-notifier": "2.3.0" }, "dependencies": { "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", "dev": true } } @@ -6423,7 +6457,7 @@ "popsicle-rewrite": "1.0.0", "popsicle-status": "2.0.1", "promise-finally": "2.2.1", - "rc": "1.2.1", + "rc": "1.2.2", "rimraf": "2.6.2", "sort-keys": "1.1.2", "string-template": "1.0.0", @@ -6560,21 +6594,42 @@ "dev": true }, "update-notifier": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", - "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", "dev": true, "requires": { "boxen": "1.2.1", - "chalk": "1.1.3", + "chalk": "2.1.0", "configstore": "3.1.1", "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", "is-npm": "1.0.0", "latest-version": "3.1.0", "semver-diff": "2.1.0", "xdg-basedir": "3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, "configstore": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", @@ -6598,6 +6653,21 @@ "is-obj": "1.0.1" } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", diff --git a/src/exportProject.ts b/src/exportProject.ts index b7e2fc6..a45da24 100644 --- a/src/exportProject.ts +++ b/src/exportProject.ts @@ -16,6 +16,8 @@ import { indent, log, setVerbose, verbose } from './log'; */ const DOJO_EXCLUDE = /@dojo\/loader\/interfaces\.d\.ts$/; +const DEFAULT_EXTENSIONS = 'ts,tsx,html,css,json,xml,md,svg,jpg,jpeg,png,gif'; + export let requireResolve = resolveCwd; export type StringMap = { [ pkg: string ]: string; }; @@ -169,6 +171,15 @@ function getProjectFileType(name: string): ProjectFileType { return ProjectFileType.XML; case '.md': return ProjectFileType.Markdown; + case '.svg': + return ProjectFileType.SVG; + case '.jpg': + case '.jpeg': + return ProjectFileType.JPEG; + case '.png': + return ProjectFileType.PNG; + case '.gif': + return ProjectFileType.GIF; default: return ProjectFileType.PlainText; } @@ -252,7 +263,7 @@ async function addDependencies(project: ProjectJson) { * @param project The reference to the project bundle * @param includeExtensions A comma deliminated string of extensions to be included in the project files */ -async function addProjectFiles(project: ProjectJson, includeExtensions: string = 'ts,tsx,html,css,json,xml,md') { +async function addProjectFiles(project: ProjectJson, includeExtensions: string = DEFAULT_EXTENSIONS) { if (project.tsconfig.include) { const globs = await Promise.all( project.tsconfig.include diff --git a/src/interfaces/project.json.d.ts b/src/interfaces/project.json.d.ts index a3a5f2b..80a647d 100644 --- a/src/interfaces/project.json.d.ts +++ b/src/interfaces/project.json.d.ts @@ -80,5 +80,9 @@ export const enum ProjectFileType { JSON, XML, SourceMap, - PlainText + PlainText, + SVG, + PNG, + JPEG, + GIF } diff --git a/src/main.ts b/src/main.ts index 557776f..63a57db 100644 --- a/src/main.ts +++ b/src/main.ts @@ -31,7 +31,7 @@ const command: Command = { options('c', { alias: 'content', describe: 'A comma separated list of extensions of files to include in the project files. Defaults to ' + - '"ts,html,css,json,xml,md".', + '"ts,tsx,html,css,json,xml,md,svg,jpg,jpeg,png,gif".', type: 'string' }); diff --git a/tests/unit/exportProject.ts b/tests/unit/exportProject.ts index 90b6bfd..2d992fa 100644 --- a/tests/unit/exportProject.ts +++ b/tests/unit/exportProject.ts @@ -127,7 +127,7 @@ registerSuite({ 'node_modules/baz/package.json': JSON.stringify({ }) }; globMap = { - 'src/**/*.{ts,tsx,html,css,json,xml,md}': [ './src/index.html' ] + 'src/**/*.{ts,tsx,html,css,json,xml,md,svg,jpg,jpeg,png,gif}': [ './src/index.html' ] }; resolveMap = {}; }, @@ -264,7 +264,7 @@ registerSuite({ }, async 'adds project files based on tsconfig.json'() { - globMap['src/**/*.{ts,tsx,html,css,json,xml,md}'] = [ + globMap['src/**/*.{ts,tsx,html,css,json,xml,md,svg,jpg,jpeg,png,gif}'] = [ 'src/index.ts', './src/index.html', 'src/core.css', @@ -304,6 +304,41 @@ registerSuite({ }, 'should have written expected contents'); }, + async 'load static assets based on configruation'() { + globMap['src/**/*.{ts,tsx,html,css,json,xml,md,svg,jpg,jpeg,png,gif}'] = [ + './src/index.html', + 'src/images/foo.svg', + 'src/images/foo.png', + 'src/images/foo.gif', + 'src/images/foo.jpg', + 'src/images/foo.jpeg' + ]; + readFileMap['tsconfig.json'] = JSON.stringify({ + compilerOptions: { }, + include: [ 'src/**/*.ts', 'src/**/*.tsx' ] + }); + await exportProject(exportArgs); + assert.strictEqual(consoleLogStub.callCount, 2, 'should have only logged twice to console'); + assert.deepEqual(JSON.parse(writeFileStub.lastCall.args[1]), { + dependencies: { development: {}, production: {} }, + environmentFiles: [], + files: [ + { name: './src/index.html', text: '', type: ProjectFileType.HTML }, + { name: 'src/images/foo.svg', text: '', type: ProjectFileType.SVG }, + { name: 'src/images/foo.png', text: '', type: ProjectFileType.PNG }, + { name: 'src/images/foo.gif', text: '', type: ProjectFileType.GIF }, + { name: 'src/images/foo.jpg', text: '', type: ProjectFileType.JPEG }, + { name: 'src/images/foo.jpeg', text: '', type: ProjectFileType.JPEG } + ], + index: './src/index.html', + package: { name: 'test-package' }, + tsconfig: { + compilerOptions: {}, + include: [ 'src/**/*.ts', 'src/**/*.tsx' ] + } + }, 'should have written expected contents'); + }, + 'resolves package dependencies': { async 'no additional dependencies'() { Object.assign(readFileMap, { diff --git a/tsconfig.json b/tsconfig.json index c71cc4b..c07b4fd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "declaration": false, + "declaration": true, "module": "umd", "moduleResolution": "node", "outDir": "_build/",