@vamship/build-utils 1.0.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vamship/build-utils",
3
- "version": "1.0.3",
3
+ "version": "1.3.0",
4
4
  "description": "Utility library for build tooling",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -41,26 +41,26 @@
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": "^7.32.0",
47
- "jsdoc": "^3.6.7",
48
- "mocha": "^9.1.2",
49
- "nodemon": "^2.0.13",
46
+ "eslint": "^8.10.0",
47
+ "jsdoc": "^3.6.10",
48
+ "mocha": "^9.2.2",
49
+ "nodemon": "^2.0.15",
50
50
  "nyc": "^15.1.0",
51
- "prettier": "^2.4.1",
52
- "rewire": "^5.0.0",
53
- "sinon": "^11.1.2",
51
+ "prettier": "^2.5.1",
52
+ "rewire": "^6.0.0",
53
+ "sinon": "^13.0.1",
54
54
  "sinon-chai": "^3.7.0"
55
55
  },
56
56
  "dependencies": {
57
- "camelcase": "^6.2.0",
57
+ "camelcase": "^6.3.0",
58
58
  "delete": "^1.1.0",
59
59
  "docdash": "^1.2.0",
60
- "dotenv": "^10.0.0",
61
- "dotenv-expand": "^5.1.0",
60
+ "dotenv": "^16.0.0",
61
+ "dotenv-expand": "^8.0.2",
62
62
  "execa": "^5.1.1",
63
- "fancy-log": "^1.3.3",
63
+ "fancy-log": "^2.0.0",
64
64
  "mkdirp": "^1.0.4",
65
65
  "semver": "^7.3.5"
66
66
  },
@@ -82,10 +82,11 @@
82
82
  },
83
83
  "optionalDependencies": {
84
84
  "gulp-jsdoc3": "= 3.0.0",
85
- "typedoc": ">= 0.22.5",
86
- "typescript": ">= 4.4.4"
85
+ "typedoc": ">=0.22.13",
86
+ "typescript": ">=4.6.2"
87
87
  },
88
88
  "engines": {
89
- "node": ">= 14.18.1"
89
+ "node": ">= 14.18.1",
90
+ "npm": ">= 8.1.0"
90
91
  }
91
92
  }
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)));
@@ -42,10 +42,11 @@ module.exports = (project, options) => {
42
42
  : [version, major, `${major}.${minor}`];
43
43
 
44
44
  const tags = tagList.map((tag) => `${repo}:${tag}`);
45
+ const latestTag = `${repo}:latest`;
45
46
 
46
47
  const tasks = tags.map((tag) => {
47
48
  const tagTask = () =>
48
- _execa(dockerBin, ['tag', tag], {
49
+ _execa(dockerBin, ['tag', latestTag, tag], {
49
50
  stdio: 'inherit',
50
51
  });
51
52
  tagTask.displayName = `publish-docker-tag-${tag}${suffix}`;
@@ -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