@vamship/build-utils 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vamship/build-utils",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Utility library for build tooling",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -41,24 +41,24 @@
41
41
  },
42
42
  "homepage": "https://github.com/vamship/build-utils#readme",
43
43
  "devDependencies": {
44
- "chai": "^4.3.4",
44
+ "chai": "^4.3.6",
45
45
  "chai-as-promised": "^7.1.1",
46
- "eslint": "^8.7.0",
47
- "jsdoc": "^3.6.7",
48
- "mocha": "^9.1.4",
46
+ "eslint": "^8.10.0",
47
+ "jsdoc": "^3.6.10",
48
+ "mocha": "^9.2.2",
49
49
  "nodemon": "^2.0.15",
50
50
  "nyc": "^15.1.0",
51
51
  "prettier": "^2.5.1",
52
52
  "rewire": "^6.0.0",
53
- "sinon": "^12.0.1",
53
+ "sinon": "^13.0.1",
54
54
  "sinon-chai": "^3.7.0"
55
55
  },
56
56
  "dependencies": {
57
57
  "camelcase": "^6.3.0",
58
58
  "delete": "^1.1.0",
59
59
  "docdash": "^1.2.0",
60
- "dotenv": "^14.2.0",
61
- "dotenv-expand": "^6.0.1",
60
+ "dotenv": "^16.0.0",
61
+ "dotenv-expand": "^8.0.2",
62
62
  "execa": "^5.1.1",
63
63
  "fancy-log": "^2.0.0",
64
64
  "mkdirp": "^1.0.4",
@@ -82,8 +82,8 @@
82
82
  },
83
83
  "optionalDependencies": {
84
84
  "gulp-jsdoc3": "= 3.0.0",
85
- "typedoc": ">=0.22.11",
86
- "typescript": ">=4.5.4"
85
+ "typedoc": ">=0.22.13",
86
+ "typescript": ">=4.6.2"
87
87
  },
88
88
  "engines": {
89
89
  "node": ">= 14.18.1",
package/src/project.js CHANGED
@@ -12,6 +12,7 @@ const SUPPORTED_PROJECT_TYPES = [
12
12
  'api',
13
13
  'aws-microservice',
14
14
  'container',
15
+ 'ui',
15
16
  ];
16
17
  const SUPPORTED_LANGUAGES = ['js', 'ts'];
17
18
 
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ const _gulp = require('gulp');
4
+ const _typescript = require('gulp-typescript');
5
+ const _execa = require('execa');
6
+
7
+ /**
8
+ * Sub builder that creates a task that will build UI project
9
+ * using vite. This method will return a watcher if the watch option
10
+ * is set to true.
11
+ *
12
+ * @private
13
+ * @param {Object} project Reference to an object that contains project metadata
14
+ * that can be used to customize build outputs.
15
+ * @param {Object} options An options object that can be used to customize the
16
+ * task.
17
+ *
18
+ * @returns {Function} A gulp task.
19
+ */
20
+ module.exports = (project, options) => {
21
+ const { watch } = Object.assign({ watch: false }, options);
22
+ const rootDir = project.rootDir;
23
+ const workingDir = rootDir.getChild('working');
24
+
25
+ const viteBin = project.rootDir.getFilePath('node_modules/.bin/vite');
26
+
27
+ const dirs = ['src', 'test'];
28
+
29
+ const distFiles = [
30
+ rootDir.getFileGlob('_scripts/*'),
31
+ rootDir.getFileGlob('nginx.conf'),
32
+ rootDir.getFileGlob('package-lock.json'),
33
+ rootDir.getFileGlob('Dockerfile*'),
34
+ rootDir.getFileGlob('LICENSE'),
35
+ rootDir.getFileGlob('README.md'),
36
+ rootDir.getFileGlob('.env'),
37
+ rootDir.getFileGlob(project.configFileName),
38
+ ];
39
+ const copyTask = () =>
40
+ _gulp
41
+ .src(distFiles, { allowEmpty: true })
42
+ .pipe(_gulp.dest(workingDir.absolutePath));
43
+
44
+ const args = ['build'];
45
+ const buildTask = () => _execa(viteBin, args, { stdio: 'inherit' });
46
+ buildTask.displayName = 'build-ui';
47
+ buildTask.description = 'Build the UI project';
48
+
49
+ const task = _gulp.series([buildTask, copyTask]);
50
+
51
+ if (watch) {
52
+ const paths = dirs
53
+ .map((dir) => rootDir.getChild(dir))
54
+ .map((dir) => ['ts', 'tsx'].map((ext) => dir.getAllFilesGlob(ext)))
55
+ .reduce((result, arr) => result.concat(arr), []);
56
+
57
+ args.push('--watch');
58
+ const buildTask = () => _execa(viteBin, args, { stdio: 'inherit' });
59
+ const task = _gulp.series([buildTask, copyTask]);
60
+ const watchTask = () => _gulp.watch(paths, task);
61
+ watchTask.displayName = 'watch-build-ui';
62
+ watchTask.description = 'Automatically build the UI project on change';
63
+ return watchTask;
64
+ }
65
+
66
+ return task;
67
+ };
@@ -27,18 +27,26 @@ module.exports = (project, options) => {
27
27
  return;
28
28
  }
29
29
 
30
- const jsBuild = require('./build-js');
31
- const tasks = [jsBuild(project, options)];
32
-
33
- if (project.hasTypescript) {
34
- const tsBuild = require('./build-ts');
35
- tasks.push(tsBuild(project, options));
36
- } else if (project.hasExportedTypes) {
37
- const typesBuild = require('./build-types');
38
- tasks.push(typesBuild(project, options));
30
+ let task;
31
+ let tasks;
32
+
33
+ if (project.projectType !== 'ui') {
34
+ const jsBuild = require('./build-js');
35
+ tasks = [jsBuild(project, options)];
36
+
37
+ if (project.hasTypescript) {
38
+ const tsBuild = require('./build-ts');
39
+ tasks.push(tsBuild(project, options));
40
+ } else if (project.hasExportedTypes) {
41
+ const typesBuild = require('./build-types');
42
+ tasks.push(typesBuild(project, options));
43
+ }
44
+ } else {
45
+ const tsBuild = require('./build-ui');
46
+ tasks = [tsBuild(project, options)];
39
47
  }
40
48
 
41
- const task = _gulp.parallel(tasks);
49
+ task = _gulp.parallel(tasks);
42
50
  if (!watch) {
43
51
  task.displayName = 'build';
44
52
  task.description = 'Transpile/copy source files into working directory';
@@ -29,7 +29,9 @@ module.exports = (project, options) => {
29
29
  const paths = dirs
30
30
  .map((dir) => rootDir.getChild(dir))
31
31
  .map((dir) =>
32
- ['ts', 'js', 'json', 'py'].map((ext) => dir.getAllFilesGlob(ext))
32
+ ['ts', 'js', 'json', 'py', 'tsx', 'jsx'].map((ext) =>
33
+ dir.getAllFilesGlob(ext)
34
+ )
33
35
  )
34
36
  .reduce((result, arr) => result.concat(arr), [])
35
37
  .concat(extras.map((file) => rootDir.getFileGlob(file)));
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const _gulp = require('gulp');
4
+
5
+ /**
6
+ * Builder function that can be used to generate a gulp task to execute
7
+ * instrumented unit/api tests.
8
+ *
9
+ * @param {Object} project Reference to an object that contains project metadata
10
+ * that can be used to customize build outputs.
11
+ * @param {Object} options An options object that can be used to customize the
12
+ * task.
13
+ *
14
+ * @returns {Function} A gulp task.
15
+ */
16
+ module.exports = (project, options) => {
17
+ const { testType, watch } = Object.assign(
18
+ { testType: 'unit', watch: false },
19
+ options
20
+ );
21
+ const tasks = [];
22
+ if (project.projectType !== 'ui') {
23
+ const nonUiTests = require('./test');
24
+ tasks.push(nonUiTests(project, options));
25
+ } else {
26
+ const uiTests = require('./test-ui');
27
+ tasks.push(uiTests(project, options));
28
+ }
29
+ const task = _gulp.parallel(tasks);
30
+ if (!watch) {
31
+ task.displayName = `test-${testType}`;
32
+ task.description = `Execute ${testType} tests`;
33
+ } else {
34
+ task.displayName = `watch-test-${testType}`;
35
+ task.description = `Automatically execute ${testType} tests on change`;
36
+ }
37
+
38
+ return task;
39
+ };
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ const _gulp = require('gulp');
4
+ const _execa = require('execa');
5
+
6
+ /**
7
+ * Builder function that can be used to generate a gulp task to execute
8
+ * instrumented unit/api tests.
9
+ *
10
+ * @param {Object} project Reference to an object that contains project metadata
11
+ * that can be used to customize build outputs.
12
+ * @param {Object} options An options object that can be used to customize the
13
+ * task.
14
+ *
15
+ * @returns {Function} A gulp task.
16
+ */
17
+ module.exports = (project, options) => {
18
+ const { testType, watch } = Object.assign(
19
+ { testType: 'unit', watch: false },
20
+ options
21
+ );
22
+
23
+ const rootDir = project.jsRootDir;
24
+ const jestBin = project.rootDir.getFilePath('node_modules/.bin/jest');
25
+ let args = ['--config', 'jest.config.js', '--coverage'];
26
+
27
+ if (watch) {
28
+ args.push('--watchAll');
29
+ const watchTask = () => _execa(jestBin, args, { stdio: 'inherit' });
30
+ watchTask.displayName = `watch-test-${testType}`;
31
+ watchTask.description = `Automatically execute ${testType} tests on change`;
32
+ return watchTask;
33
+ }
34
+
35
+ const task = () => _execa(jestBin, args, { stdio: 'inherit' });
36
+ task.displayName = `test-${testType}`;
37
+ task.description = `Execute ${testType} tests`;
38
+ return task;
39
+ };
File without changes