js-build-tools 6.6.0 → 6.8.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.
Files changed (173) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +768 -701
  3. package/babel.config.js +28 -28
  4. package/dist/build.js +75 -75
  5. package/dist/bundle.js +19 -19
  6. package/dist/bundleMinify.js +7 -7
  7. package/dist/compileReadme.js +4 -4
  8. package/dist/copyFiles.js +17 -17
  9. package/dist/copyFonts.js +4 -4
  10. package/dist/default.js +5 -5
  11. package/dist/dist.js +4 -4
  12. package/dist/distMinify.js +4 -4
  13. package/dist/docs.js +7 -7
  14. package/dist/images.js +4 -4
  15. package/dist/jsdocDocs.js +6 -6
  16. package/dist/lint.js +16 -16
  17. package/dist/partials/addToReadme.js +9 -9
  18. package/dist/partials/beginWatcher.js +4 -4
  19. package/dist/partials/cacheFiles.js +121 -0
  20. package/dist/partials/clean.js +5 -5
  21. package/dist/partials/copyFor.js +9 -9
  22. package/dist/partials/distFor.js +6 -6
  23. package/dist/partials/distForSrc.js +5 -5
  24. package/dist/partials/distSeries.js +7 -7
  25. package/dist/partials/imagesFor.js +155 -93
  26. package/dist/partials/jsdocDocsFor.js +64 -51
  27. package/dist/partials/lintSource.js +51 -51
  28. package/dist/partials/loadPeer.js +99 -99
  29. package/dist/partials/loadPlaywright.js +14 -14
  30. package/dist/partials/minifyFor.js +20 -20
  31. package/dist/partials/neostandardLint.js +175 -175
  32. package/dist/partials/readmeTemplate.js +4 -4
  33. package/dist/partials/removeDirectory.js +11 -11
  34. package/dist/partials/resolveDocsMethod.js +6 -6
  35. package/dist/partials/runOnChange.js +31 -31
  36. package/dist/partials/sassFor.js +6 -6
  37. package/dist/partials/serveStatic.js +9 -9
  38. package/dist/partials/tsFor.js +32 -32
  39. package/dist/partials/typeDocsFor.js +264 -264
  40. package/dist/partials.js +183 -176
  41. package/dist/partials.min.js +1 -1
  42. package/dist/sourceLint.js +18 -18
  43. package/dist/test-helpers/setUp.js +6 -4
  44. package/dist/testFull.js +5 -5
  45. package/dist/testQuick.js +5 -5
  46. package/dist/typeDocs.js +5 -5
  47. package/dist/typeScript.js +4 -4
  48. package/dist/utilities/convertMjsFilesForDocs.js +12 -12
  49. package/dist/utilities/dotGet.js +54 -54
  50. package/dist/utilities/dotNotate.js +79 -79
  51. package/dist/utilities/dotSet.js +45 -45
  52. package/dist/utilities/esmNamedExportsToCjs.js +15 -15
  53. package/dist/utilities/getBundleConfigs.js +9 -9
  54. package/dist/utilities/isObject.js +6 -6
  55. package/dist/utilities/strAfter.js +7 -7
  56. package/dist/utilities/strBefore.js +7 -7
  57. package/dist/watchFull.js +4 -4
  58. package/dist/watchTest.js +4 -4
  59. package/functions/build.mjs +72 -72
  60. package/functions/build.test.mjs +760 -759
  61. package/functions/bundle.mjs +44 -44
  62. package/functions/bundle.test.mjs +219 -219
  63. package/functions/bundleMinify.mjs +16 -16
  64. package/functions/bundleMinify.test.mjs +37 -37
  65. package/functions/compileReadme.mjs +9 -9
  66. package/functions/compileReadme.test.mjs +18 -18
  67. package/functions/copyFiles.mjs +32 -32
  68. package/functions/copyFiles.test.mjs +78 -78
  69. package/functions/copyFonts.mjs +9 -9
  70. package/functions/copyFonts.test.mjs +32 -32
  71. package/functions/default.mjs +12 -12
  72. package/functions/default.test.mjs +33 -33
  73. package/functions/dist.mjs +8 -8
  74. package/functions/dist.test.mjs +44 -44
  75. package/functions/distMinify.mjs +9 -9
  76. package/functions/distMinify.test.mjs +15 -15
  77. package/functions/docs.mjs +13 -13
  78. package/functions/docs.test.mjs +45 -45
  79. package/functions/gulpConfigEntries.test.mjs +23 -23
  80. package/functions/images.mjs +8 -8
  81. package/functions/images.test.mjs +140 -142
  82. package/functions/jsdocDocs.mjs +10 -10
  83. package/functions/jsdocEsmExports.test.mjs +24 -24
  84. package/functions/lint.mjs +9 -9
  85. package/functions/partials/addToReadme.mjs +25 -25
  86. package/functions/partials/addToReadme.test.mjs +34 -34
  87. package/functions/partials/beginWatcher.mjs +9 -9
  88. package/functions/partials/beginWatcher.test.mjs +19 -19
  89. package/functions/partials/cacheFiles.mjs +114 -0
  90. package/functions/partials/cacheFiles.test.mjs +151 -0
  91. package/functions/partials/clean.mjs +13 -13
  92. package/functions/partials/clean.test.mjs +22 -22
  93. package/functions/partials/copyFor.mjs +15 -15
  94. package/functions/partials/copyFor.test.mjs +53 -53
  95. package/functions/partials/distFor.mjs +22 -22
  96. package/functions/partials/distFor.test.mjs +195 -195
  97. package/functions/partials/distForSrc.mjs +11 -11
  98. package/functions/partials/distForSrc.test.mjs +18 -18
  99. package/functions/partials/distSeries.mjs +21 -21
  100. package/functions/partials/distSeries.test.mjs +34 -34
  101. package/functions/partials/imagesFor.mjs +147 -83
  102. package/functions/partials/imagesFor.test.mjs +311 -287
  103. package/functions/partials/jsdocDocsFor.mjs +163 -152
  104. package/functions/partials/jsdocDocsFor.test.mjs +182 -152
  105. package/functions/partials/lintSource.mjs +41 -41
  106. package/functions/partials/loadPeer.mjs +76 -76
  107. package/functions/partials/loadPeer.test.mjs +58 -58
  108. package/functions/partials/loadPlaywright.mjs +23 -23
  109. package/functions/partials/loadPlaywright.test.mjs +70 -70
  110. package/functions/partials/minifyFor.mjs +15 -15
  111. package/functions/partials/minifyFor.test.mjs +49 -49
  112. package/functions/partials/neostandardLint.mjs +142 -142
  113. package/functions/partials/neostandardLint.test.mjs +131 -131
  114. package/functions/partials/readmeTemplate.mjs +12 -12
  115. package/functions/partials/readmeTemplate.test.mjs +34 -34
  116. package/functions/partials/removeDirectory.mjs +34 -34
  117. package/functions/partials/removeDirectory.test.mjs +72 -72
  118. package/functions/partials/resolveDocsMethod.mjs +10 -10
  119. package/functions/partials/resolveDocsMethod.test.mjs +33 -33
  120. package/functions/partials/runOnChange.mjs +54 -54
  121. package/functions/partials/runOnChange.test.mjs +95 -95
  122. package/functions/partials/sassFor.mjs +25 -25
  123. package/functions/partials/sassFor.test.mjs +81 -81
  124. package/functions/partials/serveStatic.mjs +47 -47
  125. package/functions/partials/serveStatic.test.mjs +71 -71
  126. package/functions/partials/tsFor.mjs +92 -92
  127. package/functions/partials/tsFor.test.mjs +88 -88
  128. package/functions/partials/typeDocsFor.mjs +231 -231
  129. package/functions/partials/typeDocsFor.test.mjs +263 -263
  130. package/functions/partials.mjs +32 -31
  131. package/functions/partials.test.mjs +7 -7
  132. package/functions/sass.mjs +4 -4
  133. package/functions/sass.test.mjs +31 -31
  134. package/functions/sourceLint.mjs +13 -13
  135. package/functions/sourceLint.test.mjs +166 -166
  136. package/functions/test-helpers/neostandardLintWithRealNeostandard.mjs +40 -40
  137. package/functions/test-helpers/setUp.mjs +102 -100
  138. package/functions/test-helpers/setUp.test.mjs +19 -19
  139. package/functions/testFull.mjs +17 -17
  140. package/functions/testFull.test.mjs +17 -17
  141. package/functions/testHelpers.mjs +10 -10
  142. package/functions/testHelpers.test.mjs +7 -7
  143. package/functions/testQuick.mjs +17 -17
  144. package/functions/testQuick.test.mjs +17 -17
  145. package/functions/typeDocs.mjs +9 -9
  146. package/functions/typeDocs.test.mjs +11 -11
  147. package/functions/typeScript.mjs +8 -8
  148. package/functions/typeScript.test.mjs +11 -11
  149. package/functions/utilities/convertMjsFilesForDocs.mjs +34 -34
  150. package/functions/utilities/convertMjsFilesForDocs.test.mjs +58 -58
  151. package/functions/utilities/dotGet.mjs +49 -49
  152. package/functions/utilities/dotNotate.mjs +73 -73
  153. package/functions/utilities/dotNotate.test.mjs +41 -41
  154. package/functions/utilities/dotSet.mjs +40 -40
  155. package/functions/utilities/esmNamedExportsToCjs.mjs +30 -30
  156. package/functions/utilities/esmNamedExportsToCjs.test.mjs +47 -47
  157. package/functions/utilities/getBundleConfigs.mjs +30 -30
  158. package/functions/utilities/isObject.mjs +8 -8
  159. package/functions/utilities/strAfter.mjs +12 -12
  160. package/functions/utilities/strBefore.mjs +12 -12
  161. package/functions/watchFull.mjs +9 -9
  162. package/functions/watchFull.test.mjs +41 -41
  163. package/functions/watchTest.mjs +10 -10
  164. package/functions/watchTest.test.mjs +49 -49
  165. package/gulp.config.js +4 -4
  166. package/gulp.config.mjs +349 -340
  167. package/gulpfile.base.js +51 -51
  168. package/gulpfile.base.mjs +29 -29
  169. package/jsdoc.base.js +16 -16
  170. package/jsdoc.esmExports.js +17 -17
  171. package/package.json +146 -145
  172. package/dist/test-helpers/isolateGulpCache.js +0 -25
  173. package/functions/test-helpers/isolateGulpCache.mjs +0 -16
@@ -1,83 +1,147 @@
1
- import cache from 'gulp-cache'
2
- import { requirePeer } from './loadPeer.mjs'
3
- import { dest, src } from 'gulp'
4
- import * as gulpConfig from '../../gulp.config.mjs'
5
-
6
- const installHint = 'Add it to your project with: npm install --save-dev github:jheagle/gulp-imagemin#common-js-compatibility ' +
7
- '(the CommonJS-compatible fork - upstream gulp-imagemin is ESM-only and cannot be require()d by this package\'s CommonJS build).'
8
-
9
- /**
10
- * Load `gulp-imagemin`, an optional peer dependency: image optimization is off by default and its binary-download
11
- * dependency chain is heavy, so it is only required once the images task actually runs, and it is resolved from the
12
- * consuming project's own directory rather than from this package.
13
- * @memberOf module:partials
14
- * @param {string} [projectPath=process.cwd()] - The project directory to resolve `gulp-imagemin` from.
15
- * @returns {Function} The gulp-imagemin plugin factory.
16
- * @throws {Error} With install instructions when gulp-imagemin is missing or is the ESM-only upstream release.
17
- */
18
- export const loadImagemin = (projectPath = process.cwd()) => {
19
- const loaded = requirePeer('gulp-imagemin', {
20
- task: 'images',
21
- installHint,
22
- esmOnlyMessage: `gulp-imagemin could not be loaded because it is ESM-only. ${installHint}`,
23
- projectPath
24
- })
25
- return loaded && (loaded.__esModule || loaded.default) ? loaded.default : loaded
26
- }
27
-
28
- /**
29
- * Load the plugins `gulp-imagemin` exports by name (gifsicle, mozjpeg, optipng and svgo), each a promise of a plugin
30
- * factory, for when they need options of their own (see images.jpegQuality). Resolved like {@link loadImagemin}.
31
- * @memberOf module:partials
32
- * @param {string} [projectPath=process.cwd()] - The project directory to resolve `gulp-imagemin` from.
33
- * @returns {Object<string, Promise<Function>>} The plugin factories, by name.
34
- */
35
- export const loadImageminPlugins = (projectPath = process.cwd()) => requirePeer('gulp-imagemin', {
36
- task: 'images',
37
- installHint,
38
- esmOnlyMessage: `gulp-imagemin could not be loaded because it is ESM-only. ${installHint}`,
39
- projectPath
40
- })
41
-
42
- // The plugins imagemin runs when it isn't given any, in its own order
43
- const defaultPluginNames = ['gifsicle', 'mozjpeg', 'optipng', 'svgo']
44
-
45
- /**
46
- * The plugins imagemin uses by default, with mozjpeg set to the given JPEG quality instead of its own default (75).
47
- * @memberOf module:partials
48
- * @param {number} jpegQuality - The mozjpeg quality, 0 to 100.
49
- * @param {Object<string, Promise<Function>>} [plugins=loadImageminPlugins()] - The plugin factories, by name.
50
- * @returns {Array<Promise<Function>>} The plugins, in imagemin's default order.
51
- */
52
- export const imageminPlugins = (jpegQuality, plugins = loadImageminPlugins()) => defaultPluginNames.map(
53
- name => Promise.resolve(plugins[name]).then(makePlugin => name === 'mozjpeg' ? makePlugin({ quality: jpegQuality }) : makePlugin())
54
- )
55
-
56
- /**
57
- * Move and optimize images into the browser directory.
58
- * @memberOf module:partials
59
- * @param {string|array} [imageSrc=src/images/pattern]
60
- * @param {string} [imageDest=dest/image/folder]
61
- * @return {stream.Stream}
62
- */
63
- export const imagesFor = (imageSrc = gulpConfig.get('images.from'), imageDest = gulpConfig.get('images.to')) => {
64
- const imagemin = loadImagemin()
65
- const jpegQuality = gulpConfig.get('images.jpegQuality')
66
- // Left unset, imagemin runs its default plugins with their own defaults
67
- const plugins = jpegQuality ? imageminPlugins(jpegQuality) : undefined
68
- // Gulp 5 reads files as utf8 text unless told otherwise, which corrupts binary images (and makes gulp-cache drop them).
69
- return src(imageSrc, { encoding: false })
70
- .pipe(
71
- // Caching images that ran through imagemin
72
- cache(
73
- imagemin(plugins, {
74
- interlaced: true,
75
- silent: true,
76
- verbose: false,
77
- }),
78
- // gulp-cache keys on the file's contents alone, so keep each quality's results apart
79
- { name: jpegQuality ? `jpeg-quality-${jpegQuality}` : 'default' }
80
- )
81
- )
82
- .pipe(dest(imageDest))
83
- }
1
+ import { existsSync, readFileSync } from 'fs'
2
+ import path from 'path'
3
+ import { cacheFiles } from './cacheFiles.mjs'
4
+ import { requirePeer } from './loadPeer.mjs'
5
+ import { dest, src } from 'gulp'
6
+ import * as gulpConfig from '../../gulp.config.mjs'
7
+
8
+ const installHint = 'Add it to your project with: npm install --save-dev github:jheagle/gulp-imagemin#common-js-compatibility ' +
9
+ '(the CommonJS-compatible fork - upstream gulp-imagemin is ESM-only and cannot be require()d by this package\'s CommonJS build).'
10
+
11
+ /**
12
+ * Load `gulp-imagemin`, an optional peer dependency: image optimization is off by default and its binary-download
13
+ * dependency chain is heavy, so it is only required once the images task actually runs, and it is resolved from the
14
+ * consuming project's own directory rather than from this package.
15
+ * @memberOf module:partials
16
+ * @param {string} [projectPath=process.cwd()] - The project directory to resolve `gulp-imagemin` from.
17
+ * @returns {Function} The gulp-imagemin plugin factory.
18
+ * @throws {Error} With install instructions when gulp-imagemin is missing or is the ESM-only upstream release.
19
+ */
20
+ export const loadImagemin = (projectPath = process.cwd()) => {
21
+ const loaded = requirePeer('gulp-imagemin', {
22
+ task: 'images',
23
+ installHint,
24
+ esmOnlyMessage: `gulp-imagemin could not be loaded because it is ESM-only. ${installHint}`,
25
+ projectPath
26
+ })
27
+ return loaded && (loaded.__esModule || loaded.default) ? loaded.default : loaded
28
+ }
29
+
30
+ /**
31
+ * Load the plugins `gulp-imagemin` exports by name (gifsicle, mozjpeg, optipng and svgo), each a promise of a plugin
32
+ * factory, for when they need options of their own (see images.jpegQuality). Resolved like {@link loadImagemin}.
33
+ * @memberOf module:partials
34
+ * @param {string} [projectPath=process.cwd()] - The project directory to resolve `gulp-imagemin` from.
35
+ * @returns {Object<string, Promise<Function>>} The plugin factories, by name.
36
+ */
37
+ export const loadImageminPlugins = (projectPath = process.cwd()) => requirePeer('gulp-imagemin', {
38
+ task: 'images',
39
+ installHint,
40
+ esmOnlyMessage: `gulp-imagemin could not be loaded because it is ESM-only. ${installHint}`,
41
+ projectPath
42
+ })
43
+
44
+ // The plugins imagemin runs when it isn't given any, in its own order
45
+ const defaultPluginNames = ['gifsicle', 'mozjpeg', 'optipng', 'svgo']
46
+
47
+ /**
48
+ * The plugins imagemin uses by default, with mozjpeg set to the given JPEG quality instead of its own default (75).
49
+ * @memberOf module:partials
50
+ * @param {number} jpegQuality - The mozjpeg quality, 0 to 100.
51
+ * @param {Object<string, Promise<Function>>} [plugins=loadImageminPlugins()] - The plugin factories, by name.
52
+ * @returns {Array<Promise<Function>>} The plugins, in imagemin's default order.
53
+ */
54
+ export const imageminPlugins = (jpegQuality, plugins = loadImageminPlugins()) => defaultPluginNames.map(
55
+ name => Promise.resolve(plugins[name]).then(makePlugin => name === 'mozjpeg' ? makePlugin({ quality: jpegQuality }) : makePlugin())
56
+ )
57
+
58
+ // The packages that decide imagemin's output: the wrapper and imagemin, then each plugin with the engine it runs
59
+ const imageminPackages = [
60
+ ['gulp-imagemin'],
61
+ ['imagemin'],
62
+ ['imagemin-gifsicle', 'gifsicle'],
63
+ ['imagemin-mozjpeg', 'mozjpeg'],
64
+ ['imagemin-optipng', 'optipng-bin'],
65
+ ['imagemin-svgo', 'svgo']
66
+ ]
67
+
68
+ /**
69
+ * Find an installed package the way Node does, from a directory up through each node_modules folder. Reads the
70
+ * package.json directly, so it also works for ESM-only packages that don't export it.
71
+ * @private
72
+ * @param {string} name
73
+ * @param {string} fromDirectory
74
+ * @returns {{directory: string, version: string}|undefined}
75
+ */
76
+ const findPackage = (name, fromDirectory) => {
77
+ for (let directory = path.resolve(fromDirectory); ; directory = path.dirname(directory)) {
78
+ const file = path.join(directory, 'node_modules', name, 'package.json')
79
+ if (existsSync(file)) {
80
+ return { directory: path.dirname(file), version: JSON.parse(readFileSync(file, 'utf8')).version }
81
+ }
82
+ if (directory === path.dirname(directory)) {
83
+ return undefined
84
+ }
85
+ }
86
+ }
87
+
88
+ /**
89
+ * The installed versions of the packages that decide imagemin's output, so the image cache stops using results made
90
+ * by older versions after an upgrade (see images.cacheDir).
91
+ * @memberOf module:partials
92
+ * @param {string} [projectPath=process.cwd()] - The project directory gulp-imagemin is installed in.
93
+ * @returns {Object<string, string>} Each package's version by name; a package that isn't installed is left out.
94
+ */
95
+ export const imageminVersions = (projectPath = process.cwd()) => {
96
+ const gulpImagemin = findPackage('gulp-imagemin', projectPath)
97
+ const versions = {}
98
+ if (!gulpImagemin) {
99
+ return versions
100
+ }
101
+ for (const [wrapper, engine] of imageminPackages) {
102
+ const found = findPackage(wrapper, gulpImagemin.directory)
103
+ if (found) {
104
+ versions[wrapper] = found.version
105
+ const engineFound = engine && findPackage(engine, found.directory)
106
+ if (engineFound) {
107
+ versions[engine] = engineFound.version
108
+ }
109
+ }
110
+ }
111
+ return versions
112
+ }
113
+
114
+ /**
115
+ * Move and optimize images into the browser directory.
116
+ * @memberOf module:partials
117
+ * @param {string|array} [imageSrc=src/images/pattern]
118
+ * @param {string} [imageDest=dest/image/folder]
119
+ * @return {stream.Stream}
120
+ */
121
+ export const imagesFor = (imageSrc = gulpConfig.get('images.from'), imageDest = gulpConfig.get('images.to')) => {
122
+ const imagemin = loadImagemin()
123
+ const jpegQuality = gulpConfig.get('images.jpegQuality')
124
+ // Left unset, imagemin runs its default plugins with their own defaults
125
+ const plugins = jpegQuality ? imageminPlugins(jpegQuality) : undefined
126
+ const options = {
127
+ interlaced: true,
128
+ silent: true,
129
+ verbose: false,
130
+ }
131
+ // Gulp 5 reads files as utf8 text unless told otherwise, which corrupts binary images.
132
+ return src(imageSrc, { encoding: false })
133
+ .pipe(
134
+ // Only images imagemin hasn't optimized before go through it; the rest come from the cache
135
+ cacheFiles(
136
+ imagemin(plugins, options),
137
+ {
138
+ directory: gulpConfig.get('images.cacheDir'),
139
+ // Each quality gets results of its own
140
+ name: jpegQuality ? `jpeg-quality-${jpegQuality}` : 'default',
141
+ // A new imagemin (or plugin, or engine) version, or other options, makes new results
142
+ fingerprint: JSON.stringify({ options, versions: imageminVersions() })
143
+ }
144
+ )
145
+ )
146
+ .pipe(dest(imageDest))
147
+ }