js-build-tools 6.5.0 → 6.7.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 (169) hide show
  1. package/LICENSE +674 -674
  2. package/README.md +762 -692
  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/clean.js +5 -5
  20. package/dist/partials/copyFor.js +9 -9
  21. package/dist/partials/distFor.js +6 -6
  22. package/dist/partials/distForSrc.js +5 -5
  23. package/dist/partials/distSeries.js +7 -7
  24. package/dist/partials/imagesFor.js +93 -56
  25. package/dist/partials/jsdocDocsFor.js +46 -46
  26. package/dist/partials/lintSource.js +51 -51
  27. package/dist/partials/loadPeer.js +99 -99
  28. package/dist/partials/loadPlaywright.js +14 -14
  29. package/dist/partials/minifyFor.js +20 -20
  30. package/dist/partials/neostandardLint.js +175 -175
  31. package/dist/partials/readmeTemplate.js +4 -4
  32. package/dist/partials/removeDirectory.js +11 -11
  33. package/dist/partials/resolveDocsMethod.js +6 -6
  34. package/dist/partials/runOnChange.js +31 -31
  35. package/dist/partials/sassFor.js +6 -6
  36. package/dist/partials/serveStatic.js +9 -9
  37. package/dist/partials/tsFor.js +32 -32
  38. package/dist/partials/typeDocsFor.js +57 -51
  39. package/dist/partials.js +176 -176
  40. package/dist/sourceLint.js +18 -18
  41. package/dist/test-helpers/isolateGulpCache.js +24 -24
  42. package/dist/test-helpers/setUp.js +4 -4
  43. package/dist/testFull.js +5 -5
  44. package/dist/testQuick.js +5 -5
  45. package/dist/typeDocs.js +5 -5
  46. package/dist/typeScript.js +4 -4
  47. package/dist/utilities/convertMjsFilesForDocs.js +12 -12
  48. package/dist/utilities/dotGet.js +54 -54
  49. package/dist/utilities/dotNotate.js +79 -79
  50. package/dist/utilities/dotSet.js +45 -45
  51. package/dist/utilities/esmNamedExportsToCjs.js +15 -15
  52. package/dist/utilities/getBundleConfigs.js +9 -9
  53. package/dist/utilities/isObject.js +6 -6
  54. package/dist/utilities/strAfter.js +7 -7
  55. package/dist/utilities/strBefore.js +7 -7
  56. package/dist/watchFull.js +4 -4
  57. package/dist/watchTest.js +4 -4
  58. package/functions/build.mjs +72 -72
  59. package/functions/build.test.mjs +763 -759
  60. package/functions/bundle.mjs +44 -44
  61. package/functions/bundle.test.mjs +219 -219
  62. package/functions/bundleMinify.mjs +16 -16
  63. package/functions/bundleMinify.test.mjs +37 -37
  64. package/functions/compileReadme.mjs +9 -9
  65. package/functions/compileReadme.test.mjs +18 -18
  66. package/functions/copyFiles.mjs +32 -32
  67. package/functions/copyFiles.test.mjs +78 -78
  68. package/functions/copyFonts.mjs +9 -9
  69. package/functions/copyFonts.test.mjs +32 -32
  70. package/functions/default.mjs +12 -12
  71. package/functions/default.test.mjs +33 -33
  72. package/functions/dist.mjs +8 -8
  73. package/functions/dist.test.mjs +44 -44
  74. package/functions/distMinify.mjs +9 -9
  75. package/functions/distMinify.test.mjs +15 -15
  76. package/functions/docs.mjs +13 -13
  77. package/functions/docs.test.mjs +45 -45
  78. package/functions/gulpConfigEntries.test.mjs +23 -23
  79. package/functions/images.mjs +8 -8
  80. package/functions/images.test.mjs +142 -142
  81. package/functions/jsdocDocs.mjs +10 -10
  82. package/functions/jsdocEsmExports.test.mjs +24 -24
  83. package/functions/lint.mjs +9 -9
  84. package/functions/partials/addToReadme.mjs +25 -25
  85. package/functions/partials/addToReadme.test.mjs +34 -34
  86. package/functions/partials/beginWatcher.mjs +9 -9
  87. package/functions/partials/beginWatcher.test.mjs +19 -19
  88. package/functions/partials/clean.mjs +13 -13
  89. package/functions/partials/clean.test.mjs +22 -22
  90. package/functions/partials/copyFor.mjs +15 -15
  91. package/functions/partials/copyFor.test.mjs +53 -53
  92. package/functions/partials/distFor.mjs +22 -22
  93. package/functions/partials/distFor.test.mjs +195 -195
  94. package/functions/partials/distForSrc.mjs +11 -11
  95. package/functions/partials/distForSrc.test.mjs +18 -18
  96. package/functions/partials/distSeries.mjs +21 -21
  97. package/functions/partials/distSeries.test.mjs +34 -34
  98. package/functions/partials/imagesFor.mjs +83 -50
  99. package/functions/partials/imagesFor.test.mjs +287 -229
  100. package/functions/partials/jsdocDocsFor.mjs +163 -152
  101. package/functions/partials/jsdocDocsFor.test.mjs +182 -152
  102. package/functions/partials/lintSource.mjs +41 -41
  103. package/functions/partials/loadPeer.mjs +76 -76
  104. package/functions/partials/loadPeer.test.mjs +58 -58
  105. package/functions/partials/loadPlaywright.mjs +23 -23
  106. package/functions/partials/loadPlaywright.test.mjs +70 -70
  107. package/functions/partials/minifyFor.mjs +15 -15
  108. package/functions/partials/minifyFor.test.mjs +49 -49
  109. package/functions/partials/neostandardLint.mjs +142 -142
  110. package/functions/partials/neostandardLint.test.mjs +131 -131
  111. package/functions/partials/readmeTemplate.mjs +12 -12
  112. package/functions/partials/readmeTemplate.test.mjs +34 -34
  113. package/functions/partials/removeDirectory.mjs +34 -34
  114. package/functions/partials/removeDirectory.test.mjs +72 -72
  115. package/functions/partials/resolveDocsMethod.mjs +10 -10
  116. package/functions/partials/resolveDocsMethod.test.mjs +33 -33
  117. package/functions/partials/runOnChange.mjs +54 -54
  118. package/functions/partials/runOnChange.test.mjs +95 -95
  119. package/functions/partials/sassFor.mjs +25 -25
  120. package/functions/partials/sassFor.test.mjs +81 -81
  121. package/functions/partials/serveStatic.mjs +47 -47
  122. package/functions/partials/serveStatic.test.mjs +71 -71
  123. package/functions/partials/tsFor.mjs +92 -92
  124. package/functions/partials/tsFor.test.mjs +88 -88
  125. package/functions/partials/typeDocsFor.mjs +231 -227
  126. package/functions/partials/typeDocsFor.test.mjs +263 -252
  127. package/functions/partials.mjs +31 -31
  128. package/functions/partials.test.mjs +7 -7
  129. package/functions/sass.mjs +4 -4
  130. package/functions/sass.test.mjs +31 -31
  131. package/functions/sourceLint.mjs +13 -13
  132. package/functions/sourceLint.test.mjs +166 -166
  133. package/functions/test-helpers/isolateGulpCache.mjs +16 -16
  134. package/functions/test-helpers/neostandardLintWithRealNeostandard.mjs +40 -40
  135. package/functions/test-helpers/setUp.mjs +100 -100
  136. package/functions/test-helpers/setUp.test.mjs +19 -19
  137. package/functions/testFull.mjs +17 -17
  138. package/functions/testFull.test.mjs +17 -17
  139. package/functions/testHelpers.mjs +10 -10
  140. package/functions/testHelpers.test.mjs +7 -7
  141. package/functions/testQuick.mjs +17 -17
  142. package/functions/testQuick.test.mjs +17 -17
  143. package/functions/typeDocs.mjs +9 -9
  144. package/functions/typeDocs.test.mjs +11 -11
  145. package/functions/typeScript.mjs +8 -8
  146. package/functions/typeScript.test.mjs +11 -11
  147. package/functions/utilities/convertMjsFilesForDocs.mjs +34 -34
  148. package/functions/utilities/convertMjsFilesForDocs.test.mjs +58 -58
  149. package/functions/utilities/dotGet.mjs +49 -49
  150. package/functions/utilities/dotNotate.mjs +73 -73
  151. package/functions/utilities/dotNotate.test.mjs +41 -41
  152. package/functions/utilities/dotSet.mjs +40 -40
  153. package/functions/utilities/esmNamedExportsToCjs.mjs +30 -30
  154. package/functions/utilities/esmNamedExportsToCjs.test.mjs +47 -47
  155. package/functions/utilities/getBundleConfigs.mjs +30 -30
  156. package/functions/utilities/isObject.mjs +8 -8
  157. package/functions/utilities/strAfter.mjs +12 -12
  158. package/functions/utilities/strBefore.mjs +12 -12
  159. package/functions/watchFull.mjs +9 -9
  160. package/functions/watchFull.test.mjs +41 -41
  161. package/functions/watchTest.mjs +10 -10
  162. package/functions/watchTest.test.mjs +49 -49
  163. package/gulp.config.js +4 -4
  164. package/gulp.config.mjs +344 -327
  165. package/gulpfile.base.js +51 -51
  166. package/gulpfile.base.mjs +29 -29
  167. package/jsdoc.base.js +16 -16
  168. package/jsdoc.esmExports.js +17 -17
  169. package/package.json +146 -145
@@ -1,45 +1,45 @@
1
- import * as setUp from './test-helpers/setUp.mjs'
2
- import { docs } from './docs.mjs'
3
- import { typeDocs } from './typeDocs.mjs'
4
- import { jsdocDocs } from './jsdocDocs.mjs'
5
-
6
- const genericFunction = () => Promise.resolve(true)
7
-
8
- jest.mock('./typeDocs.mjs', () => ({ typeDocs: jest.fn(genericFunction) }))
9
- jest.mock('./jsdocDocs.mjs', () => ({ jsdocDocs: jest.fn(genericFunction) }))
10
-
11
- setUp.setDefaults('test-docs')
12
- const gulpConfig = setUp.gulpConfig
13
-
14
- beforeEach(() => setUp.beforeEach().then(() => {
15
- typeDocs.mockClear()
16
- jsdocDocs.mockClear()
17
- }))
18
-
19
- afterEach(setUp.afterEach)
20
-
21
- describe('docs', () => {
22
- test('runs jsdocDocs when resolveDocsMethod infers jsdoc', async () => {
23
- gulpConfig.set('typescript.enabled', false)
24
- gulpConfig.set('docs.method', false)
25
- await docs()
26
- expect(jsdocDocs).toHaveBeenCalledTimes(1)
27
- expect(typeDocs).not.toHaveBeenCalled()
28
- })
29
-
30
- test('runs typeDocs when resolveDocsMethod infers typedoc', async () => {
31
- gulpConfig.set('typescript.enabled', true)
32
- gulpConfig.set('docs.method', false)
33
- await docs()
34
- expect(typeDocs).toHaveBeenCalledTimes(1)
35
- expect(jsdocDocs).not.toHaveBeenCalled()
36
- })
37
-
38
- test('docs.method overrides the typescript.enabled inference either way', async () => {
39
- gulpConfig.set('typescript.enabled', true)
40
- gulpConfig.set('docs.method', 'jsdoc')
41
- await docs()
42
- expect(jsdocDocs).toHaveBeenCalledTimes(1)
43
- expect(typeDocs).not.toHaveBeenCalled()
44
- })
45
- })
1
+ import * as setUp from './test-helpers/setUp.mjs'
2
+ import { docs } from './docs.mjs'
3
+ import { typeDocs } from './typeDocs.mjs'
4
+ import { jsdocDocs } from './jsdocDocs.mjs'
5
+
6
+ const genericFunction = () => Promise.resolve(true)
7
+
8
+ jest.mock('./typeDocs.mjs', () => ({ typeDocs: jest.fn(genericFunction) }))
9
+ jest.mock('./jsdocDocs.mjs', () => ({ jsdocDocs: jest.fn(genericFunction) }))
10
+
11
+ setUp.setDefaults('test-docs')
12
+ const gulpConfig = setUp.gulpConfig
13
+
14
+ beforeEach(() => setUp.beforeEach().then(() => {
15
+ typeDocs.mockClear()
16
+ jsdocDocs.mockClear()
17
+ }))
18
+
19
+ afterEach(setUp.afterEach)
20
+
21
+ describe('docs', () => {
22
+ test('runs jsdocDocs when resolveDocsMethod infers jsdoc', async () => {
23
+ gulpConfig.set('typescript.enabled', false)
24
+ gulpConfig.set('docs.method', false)
25
+ await docs()
26
+ expect(jsdocDocs).toHaveBeenCalledTimes(1)
27
+ expect(typeDocs).not.toHaveBeenCalled()
28
+ })
29
+
30
+ test('runs typeDocs when resolveDocsMethod infers typedoc', async () => {
31
+ gulpConfig.set('typescript.enabled', true)
32
+ gulpConfig.set('docs.method', false)
33
+ await docs()
34
+ expect(typeDocs).toHaveBeenCalledTimes(1)
35
+ expect(jsdocDocs).not.toHaveBeenCalled()
36
+ })
37
+
38
+ test('docs.method overrides the typescript.enabled inference either way', async () => {
39
+ gulpConfig.set('typescript.enabled', true)
40
+ gulpConfig.set('docs.method', 'jsdoc')
41
+ await docs()
42
+ expect(jsdocDocs).toHaveBeenCalledTimes(1)
43
+ expect(typeDocs).not.toHaveBeenCalled()
44
+ })
45
+ })
@@ -1,23 +1,23 @@
1
- import { execFileSync } from 'child_process'
2
- import path from 'path'
3
- import * as esmConfig from '../gulp.config.mjs'
4
-
5
- const root = path.resolve(__dirname, '..')
6
- const readFromCjs = (dotPath) => JSON.parse(execFileSync(process.execPath, [
7
- '-e',
8
- `console.log(JSON.stringify(require('./gulp.config.js').get(${JSON.stringify(dotPath)})))`
9
- ], { cwd: root }).toString())
10
-
11
- describe('gulp.config entries', () => {
12
- test('the CommonJS entry exposes the same configuration as the ESM source', () => {
13
- for (const dotPath of ['docs', 'browser', 'dist', 'typescript']) {
14
- expect(readFromCjs(dotPath)).toEqual(JSON.parse(JSON.stringify(esmConfig.get(dotPath))))
15
- }
16
- })
17
-
18
- test('the CommonJS entry carries browser.bundles and browser.ignore/exclude', () => {
19
- for (const dotPath of ['browser.bundles', 'browser.ignore', 'browser.exclude']) {
20
- expect(readFromCjs(dotPath)).toEqual(JSON.parse(JSON.stringify(esmConfig.get(dotPath))))
21
- }
22
- })
23
- })
1
+ import { execFileSync } from 'child_process'
2
+ import path from 'path'
3
+ import * as esmConfig from '../gulp.config.mjs'
4
+
5
+ const root = path.resolve(__dirname, '..')
6
+ const readFromCjs = (dotPath) => JSON.parse(execFileSync(process.execPath, [
7
+ '-e',
8
+ `console.log(JSON.stringify(require('./gulp.config.js').get(${JSON.stringify(dotPath)})))`
9
+ ], { cwd: root }).toString())
10
+
11
+ describe('gulp.config entries', () => {
12
+ test('the CommonJS entry exposes the same configuration as the ESM source', () => {
13
+ for (const dotPath of ['docs', 'browser', 'dist', 'typescript']) {
14
+ expect(readFromCjs(dotPath)).toEqual(JSON.parse(JSON.stringify(esmConfig.get(dotPath))))
15
+ }
16
+ })
17
+
18
+ test('the CommonJS entry carries browser.bundles and browser.ignore/exclude', () => {
19
+ for (const dotPath of ['browser.bundles', 'browser.ignore', 'browser.exclude']) {
20
+ expect(readFromCjs(dotPath)).toEqual(JSON.parse(JSON.stringify(esmConfig.get(dotPath))))
21
+ }
22
+ })
23
+ })
@@ -1,8 +1,8 @@
1
- import { imagesFor } from './partials/imagesFor.mjs'
2
-
3
- /**
4
- * Move and optimize the images into the browser folder using configured settings.
5
- * @memberOf module:js-build-tools
6
- * @return {stream.Stream}
7
- */
8
- export const images = () => imagesFor()
1
+ import { imagesFor } from './partials/imagesFor.mjs'
2
+
3
+ /**
4
+ * Move and optimize the images into the browser folder using configured settings.
5
+ * @memberOf module:js-build-tools
6
+ * @return {stream.Stream}
7
+ */
8
+ export const images = () => imagesFor()
@@ -1,142 +1,142 @@
1
- import fs from 'fs'
2
- import * as setUp from './test-helpers/setUp.mjs'
3
- import { images } from './images.mjs'
4
- import { isolateGulpCache } from './test-helpers/isolateGulpCache.mjs'
5
-
6
- setUp.setDefaults('test-images')
7
- const clearImageCache = isolateGulpCache('images')
8
- const gulpConfig = setUp.gulpConfig
9
-
10
- const imageContents = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' +
11
- '<!-- Created with Inkscape (http://www.inkscape.org/) -->\n' +
12
- '\n' +
13
- '<svg\n' +
14
- ' xmlns:dc="http://purl.org/dc/elements/1.1/"\n' +
15
- ' xmlns:cc="http://creativecommons.org/ns#"\n' +
16
- ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n' +
17
- ' xmlns:svg="http://www.w3.org/2000/svg"\n' +
18
- ' xmlns="http://www.w3.org/2000/svg"\n' +
19
- ' xmlns:xlink="http://www.w3.org/1999/xlink"\n' +
20
- ' xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"\n' +
21
- ' xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"\n' +
22
- ' id="svg2"\n' +
23
- ' version="1.1"\n' +
24
- ' inkscape:version="0.91 r13725"\n' +
25
- ' width="600"\n' +
26
- ' height="600"\n' +
27
- ' viewBox="0 0 600 600"\n' +
28
- ' sodipodi:docname="logo.svg">\n' +
29
- ' <metadata\n' +
30
- ' id="metadata8">\n' +
31
- ' <rdf:RDF>\n' +
32
- ' <cc:Work\n' +
33
- ' rdf:about="">\n' +
34
- ' <dc:format>image/svg+xml</dc:format>\n' +
35
- ' <dc:type\n' +
36
- ' rdf:resource="http://purl.org/dc/dcmitype/StillImage" />\n' +
37
- ' <dc:title></dc:title>\n' +
38
- ' </cc:Work>\n' +
39
- ' </rdf:RDF>\n' +
40
- ' </metadata>\n' +
41
- ' <defs\n' +
42
- ' id="defs6" />\n' +
43
- ' <sodipodi:namedview\n' +
44
- ' pagecolor="#ffffff"\n' +
45
- ' bordercolor="#666666"\n' +
46
- ' borderopacity="1"\n' +
47
- ' objecttolerance="10"\n' +
48
- ' gridtolerance="10"\n' +
49
- ' guidetolerance="10"\n' +
50
- ' inkscape:pageopacity="0"\n' +
51
- ' inkscape:pageshadow="2"\n' +
52
- ' inkscape:window-width="1280"\n' +
53
- ' inkscape:window-height="737"\n' +
54
- ' id="namedview4"\n' +
55
- ' showgrid="false"\n' +
56
- ' inkscape:zoom="0.39333333"\n' +
57
- ' inkscape:cx="300"\n' +
58
- ' inkscape:cy="300"\n' +
59
- ' inkscape:window-x="-8"\n' +
60
- ' inkscape:window-y="-8"\n' +
61
- ' inkscape:window-maximized="1"\n' +
62
- ' inkscape:current-layer="svg2" />\n' +
63
- ' <image\n' +
64
- ' width="600"\n' +
65
- ' height="600"\n' +
66
- ' preserveAspectRatio="none"\n' +
67
- ' xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n' +
68
- 'AAADsQAAA7EB9YPtSQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAhrSURB\n' +
69
- 'VHic7d3fi1x3Gcfx97M7TdKYYNPYbLaxlVZrUaK1iviToiIpeNFIwQuLBW8UEQTv9C/wSvDS+yKo\n' +
70
- 'CFopiFe2QVpqMKVYf0DaRmibZnfTRpNs9lez+3hxzq7T3ZnZmXO+3/PMmf284DDJzJznPGfOZ79n\n' +
71
- 'zpmzs+buiESZim5A9jYFUEIpgBJKAZRQCqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAl\n' +
72
- 'lAIooRRACaUASigFUEIpgBKqU2dmM5spa2wAXk4bXf/vd7/3eQ6AbZumdvl/931T2+6b6rOODtzs\n' +
73
- '00Ov3gY+7u5uZr2W36+33R6fBt509/XBW6A3M9sPHAPWh1ynXe/bZR0HbYN+6zwF3KgVQOBbwGzN\n' +
74
- 'Gq1XbJfkfgJcqTjvXcD3EvaSax2fr7sL3p+kDemlzmvblu2yXwEcX3Ve233JushLARxjB2rMO/kB\n' +
75
- 'NLNpah7EyEB7YQQ8UGcE1OiXV50QtSWA+xTA8VUnRHV23026xap+N0y5Cz4GHAIO97i9GziYps+R\n' +
76
- 'rAGXgXlgobx9G1gtp0M9ej0M3EbRc9M/WOtd/W5Oc8Bld9+oUrBr2xwHZrpuj9L8hw9LwGvANeB6\n' +
77
- '17QIXKscwN2UJy1ngVPAySwL+b8V4AzwV+C/XnGlyg13D/AIcGe69nZw4AXgGWC+atBGZWYd4ATw\n' +
78
- 'VeAjmRf3KvAUcHHQ9sgWwK0FFEH8LnBfpkW8APzO3ZdTFTSzw8CPyLMrWwJ+7u6XMtQempl9CPgO\n' +
79
- 'xacuqV0Bfurua7s9MftwXKb/bKbyK8CTKcMH4O7XKX6Cc3guOnwA7v4KcC5T+X8OEz5o7v1Arhf8\n' +
80
- 'jLsvZar9Zoaa68CzGepW9UymukO/dk0FcIHiw//UzmeouSnHD82VcnQdC+6+ALyTofTQr10jASzf\n' +
81
- 'ZC9kKJ1zY85nqDk24euSo6e5YZ/Y5CF5jhHwWoaam3KMDOMYwMXUBd196NeuzRekLrt7jlDnNI4B\n' +
82
- 'DO2pzQHMOfrlMo4BTD4CjqLNAVyNbqCCoU5NNCy0pzYHUCaAAiihFEAJpQBKKAVQQimAEkoBlFAK\n' +
83
- 'oIRSACWUAiihFEAJpQBKKAVQQimAEkoBlFAKoIRSACWUAiihFEAJpS+YbNZDZvZgdBPbHIlcuALY\n' +
84
- 'rCMEb/Bxo12whFIAJZQCKKEUQAmlAEooBVBCKYASSgGUUDoR3awLwMXoJrb5IHn/JMVACmCzXnL3\n' +
85
- 'P0c30c3MThMYQO2CJVSbA5jlT3hLs9ocwDb3LqU2b0SNgBOgzQFsc+9SavNG1Ag4AdocwDb3LqU2\n' +
86
- 'b8Q29y6lNm9E7YIngAIoodocQJkACqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAllAIo\n' +
87
- 'oRRACdXmAN7MXF9X21RkZkPnqs0BXM1c/z2Z60+yoV87BbC/Q5nrT7KhXzsFsL/DGWqO4249R08K\n' +
88
- 'YAI5RsCjGWrWlaOnPRHAlcz135ehZtiXAA0wm6HmHcM+sc0BzDYCmtlB4BMZSufY2JWZ2a3AbRlK\n' +
89
- 'f8bMpod5ogLY2xeAWzLUPWBm4zQK3pOp7nuBTw3zxDYHMPku2MyOmdm3gYdT1+7yTTO7PWP9oZjZ\n' +
90
- 'CeDRjIv4hpk9ZmYD/zJUm7+gsvIIWJ4ovR2YAY6X0+a/c/9QzgI/NrPXgZeBt4BF4Ho5Lbr7RooF\n' +
91
- 'mVmH4oDgcNftDHBf2UfOo3IDPgk8YGaXgDlgvpzmgP+4u++pAJqZAT+k2AiR6z4FfKCctnMzWwZ+\n' +
92
- '7+7nqhQ3s68AXwZurd5iMtPA+8up25qZXWjzLnjkALq7A8cY75HfgIMUG66qacYjfIPsA+5ocwCr\n' +
93
- 'vgfMff4wlbWgeZu02uYAXqk4X2s2To1527KOa00GMOUuYdndr1WctzUbJ2jeJq00GcCUV5fM1Zi3\n' +
94
- 'NRunxrxteZvRzC64PO2RcgS8VGPetgRwL+yCV5s6GjxI2nNOdUbA54DzgHdNG31uh33cKdZvc5rq\n' +
95
- 'c9vvvl7/v15jHeeBP/RZhzrraQy/nsM8/npTAUx9cecrVWd097+lbGQcuftV4E/RfQyjqfeAKQP4\n' +
96
- 'lrsvJKwngZoKYMprzv6RsJYEGxhAM7vXzD6dYDkfT1Bj098T1pJgO94DlkesJ4EvAXeX930U+LW7\n' +
97
- 'j3xqoLzm7MP12txy0d3/naiWjIF3BbAM32PsvBjzY8CdZvaEu4/6925PUu9zzW5/TFRHxsTWLri8\n' +
98
- 'gvVx+l8JfBT4gZl9fsRlpLqy+DV3/1eiWjImut8DnqYY6QbpAI+a2eNmtn+34uWu+/4a/XXT6DeB\n' +
99
- 'OgDlZeKfG2G+B4ATZvZbdz/f6wlmdj/F7jyFl/otR9rN3B0z+z5wb8Ual4CzwBvAMsWVxg9S7HpT\n' +
100
- 'fPrxNvCzKgdAMv46Znac6uGD4tLu04n62e4m8ITCN7mmgLuimxjgyQpH3dIiHXZeqz8OHHjK3Z+P\n' +
101
- 'bkTy6pDuHF0qDvzG3c9GNyL5TQEXopvosg78QuHbOzrAq9FNlK4Cv3L3l6MbkeZ03P2qmV1mhC+U\n' +
102
- 'yeAcxQHHcmAPEmDzk5AzQcu/QXGa5ZcK395kxe9qg5mdAk41tNw14FngaXdfamiZMoa2AghgZl8H\n' +
103
- 'vphxee9Q/E7G0+6+mHE50hLbA2jA14CHSHt6Zg54EfiLu9f5ZRuZMO8K4NadxdeHPUzx7UZVP8+9\n' +
104
- 'TBG6F919vnKHMtF6BnDrQbNZ4LMU3yY1w84v7naKX6C+QXFRwhubk7vfyNGwTJaBAdzxZLMDwBGK\n' +
105
- 'g4glYMVHKSCyzUgBFEmtzd+OJRNAAZRQCqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAl\n' +
106
- 'lAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAllAIooRRACaUASigFUEL9D1MqMi7YkUEVAAAAAElF\n' +
107
- 'TkSuQmCC\n' +
108
- '"\n' +
109
- ' id="image10"\n' +
110
- ' x="0"\n' +
111
- ' y="0" />\n' +
112
- ' <path\n' +
113
- ' style="fill:#000000"\n' +
114
- ' d="M 19.039097,494.38241 C 2.0018627,482.75861 -2.8301068,468.02182 5.0071177,451.587 8.2776829,444.72855 15.162733,436.35919 20.307229,432.98839 c 8.904129,-5.83422 9.948263,-5.67522 21.727331,3.30915 28.014638,21.3678 44.091105,18.882 51.54879,-7.97059 C 99.533959,406.9008 98.83533,123.18555 92.8125,115.28305 90.196335,111.85041 81.496733,108.63382 73.125,108.00381 58.734191,106.92084 58.077731,106.30388 56.961131,92.8125 L 55.797259,78.75 l 163.053411,0 163.05342,0 2.57381,11.71845 c 2.93006,13.34047 -1.71086,18.13302 -17.64754,18.22413 C 347.54041,108.80285 345,115.82292 345,169.01786 l 0,48.48214 67.5,0 67.5,0 0,-48.1688 c 0,-41.90267 -0.89209,-48.97614 -6.85778,-54.37499 C 469.37044,111.54279 462.75847,108.75 458.44894,108.75 443.44309,108.75 438.75,104.6341 438.75,91.473791 l 0,-12.723791 80.85139,0 80.85135,0 -1.16385,14.0625 c -1.13201,13.67745 -1.60515,14.09431 -17.27948,15.22432 -13.44982,0.96964 -16.73767,2.79799 -19.87627,11.0531 -5.80185,15.26002 -2.83763,249.42009 3.25016,256.74719 2.61705,3.14985 11.47643,6.80123 19.6875,8.11425 14.52533,2.32268 14.9292,2.79386 14.9292,17.41755 l 0,15.03026 -79.6875,-1.01208 -79.6875,-1.01209 -1.1367,-13.60684 c -1.13565,-13.59401 -1.11975,-13.60939 16.875,-16.30515 9.90645,-1.4841 19.25149,-4.64227 20.76679,-7.01816 1.5153,-2.37593 2.78092,-30.05423 2.8125,-61.50735 L 480,258.75 l -67.59289,0 -67.5929,0 1.0304,60.9375 1.03039,60.9375 19.6875,3.3399 c 20.4921,3.4764 22.16576,5.78036 17.32391,23.8476 -2.25337,8.40847 -2.53065,8.4375 -80.57378,8.4375 l -78.31263,0 0,-14.95567 c 0,-14.53673 0.41823,-15.02258 14.9292,-17.34297 8.21107,-1.31302 17.07044,-4.96657 19.6875,-8.11909 3.63727,-4.38139 4.7583,-35.56081 4.7583,-132.34294 0,-69.63615 -1.23091,-127.84279 -2.73535,-129.3481 -9.73748,-9.7431 -68.9232,-8.34789 -79.15408,1.86593 -3.08612,3.08097 -4.99292,46.77065 -6.52417,149.48557 -1.45514,97.60931 -3.64592,149.67975 -6.6905,159.01994 -13.55129,41.57292 -61.40288,74.9124 -111.000242,77.33685 -22.754302,1.11229 -28.166407,0.0821 -39.231561,-7.46711 z"\n' +
115
- ' id="path3338"\n' +
116
- ' inkscape:connector-curvature="0" />\n' +
117
- '</svg>\n'
118
-
119
- // The cache outlives a run, so clear it or a stale result from an older imagemin can pass
120
- beforeEach(() => clearImageCache().then(setUp.beforeEach))
121
-
122
- afterEach(setUp.afterEach)
123
-
124
- describe('images', () => {
125
- test('uses the configured paths', done => {
126
- const srcPath = gulpConfig.get('srcPath') + '/img'
127
- fs.mkdirSync(srcPath, { recursive: true })
128
- const imageFile = `${srcPath}/imageToCopy.svg`
129
- fs.writeFileSync(imageFile, imageContents)
130
- const imagePath = gulpConfig.get('images.to')
131
- expect.assertions(1)
132
- images()
133
- .on('finish', () => {
134
- expect(fs.existsSync(imagePath)).toBeTruthy()
135
- done()
136
- })
137
- .on('error', error => {
138
- console.error('Encountered error', error)
139
- done()
140
- })
141
- }, 10000)
142
- })
1
+ import fs from 'fs'
2
+ import * as setUp from './test-helpers/setUp.mjs'
3
+ import { images } from './images.mjs'
4
+ import { isolateGulpCache } from './test-helpers/isolateGulpCache.mjs'
5
+
6
+ setUp.setDefaults('test-images')
7
+ const clearImageCache = isolateGulpCache('images')
8
+ const gulpConfig = setUp.gulpConfig
9
+
10
+ const imageContents = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' +
11
+ '<!-- Created with Inkscape (http://www.inkscape.org/) -->\n' +
12
+ '\n' +
13
+ '<svg\n' +
14
+ ' xmlns:dc="http://purl.org/dc/elements/1.1/"\n' +
15
+ ' xmlns:cc="http://creativecommons.org/ns#"\n' +
16
+ ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\n' +
17
+ ' xmlns:svg="http://www.w3.org/2000/svg"\n' +
18
+ ' xmlns="http://www.w3.org/2000/svg"\n' +
19
+ ' xmlns:xlink="http://www.w3.org/1999/xlink"\n' +
20
+ ' xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"\n' +
21
+ ' xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"\n' +
22
+ ' id="svg2"\n' +
23
+ ' version="1.1"\n' +
24
+ ' inkscape:version="0.91 r13725"\n' +
25
+ ' width="600"\n' +
26
+ ' height="600"\n' +
27
+ ' viewBox="0 0 600 600"\n' +
28
+ ' sodipodi:docname="logo.svg">\n' +
29
+ ' <metadata\n' +
30
+ ' id="metadata8">\n' +
31
+ ' <rdf:RDF>\n' +
32
+ ' <cc:Work\n' +
33
+ ' rdf:about="">\n' +
34
+ ' <dc:format>image/svg+xml</dc:format>\n' +
35
+ ' <dc:type\n' +
36
+ ' rdf:resource="http://purl.org/dc/dcmitype/StillImage" />\n' +
37
+ ' <dc:title></dc:title>\n' +
38
+ ' </cc:Work>\n' +
39
+ ' </rdf:RDF>\n' +
40
+ ' </metadata>\n' +
41
+ ' <defs\n' +
42
+ ' id="defs6" />\n' +
43
+ ' <sodipodi:namedview\n' +
44
+ ' pagecolor="#ffffff"\n' +
45
+ ' bordercolor="#666666"\n' +
46
+ ' borderopacity="1"\n' +
47
+ ' objecttolerance="10"\n' +
48
+ ' gridtolerance="10"\n' +
49
+ ' guidetolerance="10"\n' +
50
+ ' inkscape:pageopacity="0"\n' +
51
+ ' inkscape:pageshadow="2"\n' +
52
+ ' inkscape:window-width="1280"\n' +
53
+ ' inkscape:window-height="737"\n' +
54
+ ' id="namedview4"\n' +
55
+ ' showgrid="false"\n' +
56
+ ' inkscape:zoom="0.39333333"\n' +
57
+ ' inkscape:cx="300"\n' +
58
+ ' inkscape:cy="300"\n' +
59
+ ' inkscape:window-x="-8"\n' +
60
+ ' inkscape:window-y="-8"\n' +
61
+ ' inkscape:window-maximized="1"\n' +
62
+ ' inkscape:current-layer="svg2" />\n' +
63
+ ' <image\n' +
64
+ ' width="600"\n' +
65
+ ' height="600"\n' +
66
+ ' preserveAspectRatio="none"\n' +
67
+ ' xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n' +
68
+ 'AAADsQAAA7EB9YPtSQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAhrSURB\n' +
69
+ 'VHic7d3fi1x3Gcfx97M7TdKYYNPYbLaxlVZrUaK1iviToiIpeNFIwQuLBW8UEQTv9C/wSvDS+yKo\n' +
70
+ 'CFopiFe2QVpqMKVYf0DaRmibZnfTRpNs9lez+3hxzq7T3ZnZmXO+3/PMmf284DDJzJznPGfOZ79n\n' +
71
+ 'zpmzs+buiESZim5A9jYFUEIpgBJKAZRQCqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAl\n' +
72
+ 'lAIooRRACaUASigFUEIpgBKqU2dmM5spa2wAXk4bXf/vd7/3eQ6AbZumdvl/931T2+6b6rOODtzs\n' +
73
+ '00Ov3gY+7u5uZr2W36+33R6fBt509/XBW6A3M9sPHAPWh1ynXe/bZR0HbYN+6zwF3KgVQOBbwGzN\n' +
74
+ 'Gq1XbJfkfgJcqTjvXcD3EvaSax2fr7sL3p+kDemlzmvblu2yXwEcX3Ve233JushLARxjB2rMO/kB\n' +
75
+ 'NLNpah7EyEB7YQQ8UGcE1OiXV50QtSWA+xTA8VUnRHV23026xap+N0y5Cz4GHAIO97i9GziYps+R\n' +
76
+ 'rAGXgXlgobx9G1gtp0M9ej0M3EbRc9M/WOtd/W5Oc8Bld9+oUrBr2xwHZrpuj9L8hw9LwGvANeB6\n' +
77
+ '17QIXKscwN2UJy1ngVPAySwL+b8V4AzwV+C/XnGlyg13D/AIcGe69nZw4AXgGWC+atBGZWYd4ATw\n' +
78
+ 'VeAjmRf3KvAUcHHQ9sgWwK0FFEH8LnBfpkW8APzO3ZdTFTSzw8CPyLMrWwJ+7u6XMtQempl9CPgO\n' +
79
+ 'xacuqV0Bfurua7s9MftwXKb/bKbyK8CTKcMH4O7XKX6Cc3guOnwA7v4KcC5T+X8OEz5o7v1Arhf8\n' +
80
+ 'jLsvZar9Zoaa68CzGepW9UymukO/dk0FcIHiw//UzmeouSnHD82VcnQdC+6+ALyTofTQr10jASzf\n' +
81
+ 'ZC9kKJ1zY85nqDk24euSo6e5YZ/Y5CF5jhHwWoaam3KMDOMYwMXUBd196NeuzRekLrt7jlDnNI4B\n' +
82
+ 'DO2pzQHMOfrlMo4BTD4CjqLNAVyNbqCCoU5NNCy0pzYHUCaAAiihFEAJpQBKKAVQQimAEkoBlFAK\n' +
83
+ 'oIRSACWUAiihFEAJpQBKKAVQQimAEkoBlFAKoIRSACWUAiihFEAJpS+YbNZDZvZgdBPbHIlcuALY\n' +
84
+ 'rCMEb/Bxo12whFIAJZQCKKEUQAmlAEooBVBCKYASSgGUUDoR3awLwMXoJrb5IHn/JMVACmCzXnL3\n' +
85
+ 'P0c30c3MThMYQO2CJVSbA5jlT3hLs9ocwDb3LqU2b0SNgBOgzQFsc+9SavNG1Ag4AdocwDb3LqU2\n' +
86
+ 'b8Q29y6lNm9E7YIngAIoodocQJkACqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAllAIo\n' +
87
+ 'oRRACdXmAN7MXF9X21RkZkPnqs0BXM1c/z2Z60+yoV87BbC/Q5nrT7KhXzsFsL/DGWqO4249R08K\n' +
88
+ 'YAI5RsCjGWrWlaOnPRHAlcz135ehZtiXAA0wm6HmHcM+sc0BzDYCmtlB4BMZSufY2JWZ2a3AbRlK\n' +
89
+ 'f8bMpod5ogLY2xeAWzLUPWBm4zQK3pOp7nuBTw3zxDYHMPku2MyOmdm3gYdT1+7yTTO7PWP9oZjZ\n' +
90
+ 'CeDRjIv4hpk9ZmYD/zJUm7+gsvIIWJ4ovR2YAY6X0+a/c/9QzgI/NrPXgZeBt4BF4Ho5Lbr7RooF\n' +
91
+ 'mVmH4oDgcNftDHBf2UfOo3IDPgk8YGaXgDlgvpzmgP+4u++pAJqZAT+k2AiR6z4FfKCctnMzWwZ+\n' +
92
+ '7+7nqhQ3s68AXwZurd5iMtPA+8up25qZXWjzLnjkALq7A8cY75HfgIMUG66qacYjfIPsA+5ocwCr\n' +
93
+ 'vgfMff4wlbWgeZu02uYAXqk4X2s2To1527KOa00GMOUuYdndr1WctzUbJ2jeJq00GcCUV5fM1Zi3\n' +
94
+ 'NRunxrxteZvRzC64PO2RcgS8VGPetgRwL+yCV5s6GjxI2nNOdUbA54DzgHdNG31uh33cKdZvc5rq\n' +
95
+ 'c9vvvl7/v15jHeeBP/RZhzrraQy/nsM8/npTAUx9cecrVWd097+lbGQcuftV4E/RfQyjqfeAKQP4\n' +
96
+ 'lrsvJKwngZoKYMprzv6RsJYEGxhAM7vXzD6dYDkfT1Bj098T1pJgO94DlkesJ4EvAXeX930U+LW7\n' +
97
+ 'j3xqoLzm7MP12txy0d3/naiWjIF3BbAM32PsvBjzY8CdZvaEu4/6925PUu9zzW5/TFRHxsTWLri8\n' +
98
+ 'gvVx+l8JfBT4gZl9fsRlpLqy+DV3/1eiWjImut8DnqYY6QbpAI+a2eNmtn+34uWu+/4a/XXT6DeB\n' +
99
+ 'OgDlZeKfG2G+B4ATZvZbdz/f6wlmdj/F7jyFl/otR9rN3B0z+z5wb8Ual4CzwBvAMsWVxg9S7HpT\n' +
100
+ 'fPrxNvCzKgdAMv46Znac6uGD4tLu04n62e4m8ITCN7mmgLuimxjgyQpH3dIiHXZeqz8OHHjK3Z+P\n' +
101
+ 'bkTy6pDuHF0qDvzG3c9GNyL5TQEXopvosg78QuHbOzrAq9FNlK4Cv3L3l6MbkeZ03P2qmV1mhC+U\n' +
102
+ 'yeAcxQHHcmAPEmDzk5AzQcu/QXGa5ZcK395kxe9qg5mdAk41tNw14FngaXdfamiZMoa2AghgZl8H\n' +
103
+ 'vphxee9Q/E7G0+6+mHE50hLbA2jA14CHSHt6Zg54EfiLu9f5ZRuZMO8K4NadxdeHPUzx7UZVP8+9\n' +
104
+ 'TBG6F919vnKHMtF6BnDrQbNZ4LMU3yY1w84v7naKX6C+QXFRwhubk7vfyNGwTJaBAdzxZLMDwBGK\n' +
105
+ 'g4glYMVHKSCyzUgBFEmtzd+OJRNAAZRQCqCEUgAllAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAl\n' +
106
+ 'lAIooRRACaUASigFUEIpgBJKAZRQCqCEUgAllAIooRRACaUASigFUEL9D1MqMi7YkUEVAAAAAElF\n' +
107
+ 'TkSuQmCC\n' +
108
+ '"\n' +
109
+ ' id="image10"\n' +
110
+ ' x="0"\n' +
111
+ ' y="0" />\n' +
112
+ ' <path\n' +
113
+ ' style="fill:#000000"\n' +
114
+ ' d="M 19.039097,494.38241 C 2.0018627,482.75861 -2.8301068,468.02182 5.0071177,451.587 8.2776829,444.72855 15.162733,436.35919 20.307229,432.98839 c 8.904129,-5.83422 9.948263,-5.67522 21.727331,3.30915 28.014638,21.3678 44.091105,18.882 51.54879,-7.97059 C 99.533959,406.9008 98.83533,123.18555 92.8125,115.28305 90.196335,111.85041 81.496733,108.63382 73.125,108.00381 58.734191,106.92084 58.077731,106.30388 56.961131,92.8125 L 55.797259,78.75 l 163.053411,0 163.05342,0 2.57381,11.71845 c 2.93006,13.34047 -1.71086,18.13302 -17.64754,18.22413 C 347.54041,108.80285 345,115.82292 345,169.01786 l 0,48.48214 67.5,0 67.5,0 0,-48.1688 c 0,-41.90267 -0.89209,-48.97614 -6.85778,-54.37499 C 469.37044,111.54279 462.75847,108.75 458.44894,108.75 443.44309,108.75 438.75,104.6341 438.75,91.473791 l 0,-12.723791 80.85139,0 80.85135,0 -1.16385,14.0625 c -1.13201,13.67745 -1.60515,14.09431 -17.27948,15.22432 -13.44982,0.96964 -16.73767,2.79799 -19.87627,11.0531 -5.80185,15.26002 -2.83763,249.42009 3.25016,256.74719 2.61705,3.14985 11.47643,6.80123 19.6875,8.11425 14.52533,2.32268 14.9292,2.79386 14.9292,17.41755 l 0,15.03026 -79.6875,-1.01208 -79.6875,-1.01209 -1.1367,-13.60684 c -1.13565,-13.59401 -1.11975,-13.60939 16.875,-16.30515 9.90645,-1.4841 19.25149,-4.64227 20.76679,-7.01816 1.5153,-2.37593 2.78092,-30.05423 2.8125,-61.50735 L 480,258.75 l -67.59289,0 -67.5929,0 1.0304,60.9375 1.03039,60.9375 19.6875,3.3399 c 20.4921,3.4764 22.16576,5.78036 17.32391,23.8476 -2.25337,8.40847 -2.53065,8.4375 -80.57378,8.4375 l -78.31263,0 0,-14.95567 c 0,-14.53673 0.41823,-15.02258 14.9292,-17.34297 8.21107,-1.31302 17.07044,-4.96657 19.6875,-8.11909 3.63727,-4.38139 4.7583,-35.56081 4.7583,-132.34294 0,-69.63615 -1.23091,-127.84279 -2.73535,-129.3481 -9.73748,-9.7431 -68.9232,-8.34789 -79.15408,1.86593 -3.08612,3.08097 -4.99292,46.77065 -6.52417,149.48557 -1.45514,97.60931 -3.64592,149.67975 -6.6905,159.01994 -13.55129,41.57292 -61.40288,74.9124 -111.000242,77.33685 -22.754302,1.11229 -28.166407,0.0821 -39.231561,-7.46711 z"\n' +
115
+ ' id="path3338"\n' +
116
+ ' inkscape:connector-curvature="0" />\n' +
117
+ '</svg>\n'
118
+
119
+ // The cache outlives a run, so clear it or a stale result from an older imagemin can pass
120
+ beforeEach(() => clearImageCache().then(setUp.beforeEach))
121
+
122
+ afterEach(setUp.afterEach)
123
+
124
+ describe('images', () => {
125
+ test('uses the configured paths', done => {
126
+ const srcPath = gulpConfig.get('srcPath') + '/img'
127
+ fs.mkdirSync(srcPath, { recursive: true })
128
+ const imageFile = `${srcPath}/imageToCopy.svg`
129
+ fs.writeFileSync(imageFile, imageContents)
130
+ const imagePath = gulpConfig.get('images.to')
131
+ expect.assertions(1)
132
+ images()
133
+ .on('finish', () => {
134
+ expect(fs.existsSync(imagePath)).toBeTruthy()
135
+ done()
136
+ })
137
+ .on('error', error => {
138
+ console.error('Encountered error', error)
139
+ done()
140
+ })
141
+ }, 10000)
142
+ })
@@ -1,10 +1,10 @@
1
- import { jsdocDocsFor } from './partials/jsdocDocsFor.mjs'
2
-
3
- /**
4
- * Generate the HTML documentation of a plain-JavaScript project from its source, with a modern jsdoc theme
5
- * instead of jsdoc's own classic default. Turn it on with docs.enabled and docs.method: 'jsdoc' (the default
6
- * when typescript.enabled is off), see {@link module:partials.jsdocDocsFor}.
7
- * @memberOf module:js-build-tools
8
- * @returns {Function}
9
- */
10
- export const jsdocDocs = jsdocDocsFor()
1
+ import { jsdocDocsFor } from './partials/jsdocDocsFor.mjs'
2
+
3
+ /**
4
+ * Generate the HTML documentation of a plain-JavaScript project from its source, with a modern jsdoc theme
5
+ * instead of jsdoc's own classic default. Turn it on with docs.enabled and docs.method: 'jsdoc' (the default
6
+ * when typescript.enabled is off), see {@link module:partials.jsdocDocsFor}.
7
+ * @memberOf module:js-build-tools
8
+ * @returns {Function}
9
+ */
10
+ export const jsdocDocs = jsdocDocsFor()
@@ -1,24 +1,24 @@
1
- import path from 'node:path'
2
- import jsdocBase from '../jsdoc.base.js'
3
- import { handlers } from '../jsdoc.esmExports.js'
4
-
5
- describe('jsdoc.esmExports', () => {
6
- test('is one of the plugins in jsdoc.base', () => {
7
- expect(jsdocBase.plugins).toContain(path.resolve('jsdoc.esmExports.js'))
8
- })
9
-
10
- test('drops the exports. jsdoc gives a documented export of a file without its own @module tag', () => {
11
- const doclet = { name: 'exports.build', longname: 'module:js-build-tools.exports.build' }
12
- handlers.newDoclet({ doclet })
13
- expect(doclet).toEqual({ name: 'build', longname: 'module:js-build-tools.build' })
14
- })
15
-
16
- test('leaves every other name as it is', () => {
17
- const doclet = { name: 'build', longname: 'module:js-build-tools.build' }
18
- handlers.newDoclet({ doclet })
19
- expect(doclet).toEqual({ name: 'build', longname: 'module:js-build-tools.build' })
20
- const exportsless = { name: 'exportsThing', longname: 'exportsThing' }
21
- handlers.newDoclet({ doclet: exportsless })
22
- expect(exportsless).toEqual({ name: 'exportsThing', longname: 'exportsThing' })
23
- })
24
- })
1
+ import path from 'node:path'
2
+ import jsdocBase from '../jsdoc.base.js'
3
+ import { handlers } from '../jsdoc.esmExports.js'
4
+
5
+ describe('jsdoc.esmExports', () => {
6
+ test('is one of the plugins in jsdoc.base', () => {
7
+ expect(jsdocBase.plugins).toContain(path.resolve('jsdoc.esmExports.js'))
8
+ })
9
+
10
+ test('drops the exports. jsdoc gives a documented export of a file without its own @module tag', () => {
11
+ const doclet = { name: 'exports.build', longname: 'module:js-build-tools.exports.build' }
12
+ handlers.newDoclet({ doclet })
13
+ expect(doclet).toEqual({ name: 'build', longname: 'module:js-build-tools.build' })
14
+ })
15
+
16
+ test('leaves every other name as it is', () => {
17
+ const doclet = { name: 'build', longname: 'module:js-build-tools.build' }
18
+ handlers.newDoclet({ doclet })
19
+ expect(doclet).toEqual({ name: 'build', longname: 'module:js-build-tools.build' })
20
+ const exportsless = { name: 'exportsThing', longname: 'exportsThing' }
21
+ handlers.newDoclet({ doclet: exportsless })
22
+ expect(exportsless).toEqual({ name: 'exportsThing', longname: 'exportsThing' })
23
+ })
24
+ })
@@ -1,9 +1,9 @@
1
- import { lintSource } from './partials/lintSource.mjs'
2
-
3
- /**
4
- * The standalone lint command (`gulp lint`, or `npm run lint`): the same linting and fixing as sourceLint, but it
5
- * fails (exits non-zero) when any errors remain that neostandard could not fix automatically.
6
- * @memberOf module:js-build-tools
7
- * @returns {*}
8
- */
9
- export const lint = () => lintSource({ failOnError: true })
1
+ import { lintSource } from './partials/lintSource.mjs'
2
+
3
+ /**
4
+ * The standalone lint command (`gulp lint`, or `npm run lint`): the same linting and fixing as sourceLint, but it
5
+ * fails (exits non-zero) when any errors remain that neostandard could not fix automatically.
6
+ * @memberOf module:js-build-tools
7
+ * @returns {*}
8
+ */
9
+ export const lint = () => lintSource({ failOnError: true })
@@ -1,25 +1,25 @@
1
- import fs from 'fs'
2
- import * as gulpConfig from '../../gulp.config.mjs'
3
- import jsdoc2md from 'jsdoc-to-markdown'
4
- import { globSync } from 'glob'
5
- import { convertMjsFilesForDocs } from '../utilities/convertMjsFilesForDocs.mjs'
6
-
7
- /**
8
- * Appends all the jsdoc comments to the readme file. Assumes empty or templated file.
9
- * Configure this with 'readmeSearch', 'readmePath', 'readmeFile', and 'readmeOptions'.
10
- *
11
- * jsdoc-to-markdown only recognizes `.js` files, even though it parses real ESM syntax just fine once it reads
12
- * one - `readme.fromEsm` (empty by default) names `.mjs` files to include anyway, converted on the fly (see
13
- * {@link convertMjsFilesForDocs}) and cleaned up again once this has read them, win or lose.
14
- * @memberOf module:partials
15
- * @returns {string|Uint8Array}
16
- */
17
- export const addToReadme = () => {
18
- const { filePaths: esmFilePaths, cleanUp } = convertMjsFilesForDocs(globSync(gulpConfig.get('readme.fromEsm')))
19
- return jsdoc2md
20
- .render({ files: [...globSync(gulpConfig.get('readme.from')), ...esmFilePaths] })
21
- .finally(cleanUp)
22
- .then(
23
- readme => fs.appendFileSync(gulpConfig.get('readme.to') + gulpConfig.get('readme.file'), readme, gulpConfig.get('readmeOptions'))
24
- )
25
- }
1
+ import fs from 'fs'
2
+ import * as gulpConfig from '../../gulp.config.mjs'
3
+ import jsdoc2md from 'jsdoc-to-markdown'
4
+ import { globSync } from 'glob'
5
+ import { convertMjsFilesForDocs } from '../utilities/convertMjsFilesForDocs.mjs'
6
+
7
+ /**
8
+ * Appends all the jsdoc comments to the readme file. Assumes empty or templated file.
9
+ * Configure this with 'readmeSearch', 'readmePath', 'readmeFile', and 'readmeOptions'.
10
+ *
11
+ * jsdoc-to-markdown only recognizes `.js` files, even though it parses real ESM syntax just fine once it reads
12
+ * one - `readme.fromEsm` (empty by default) names `.mjs` files to include anyway, converted on the fly (see
13
+ * {@link convertMjsFilesForDocs}) and cleaned up again once this has read them, win or lose.
14
+ * @memberOf module:partials
15
+ * @returns {string|Uint8Array}
16
+ */
17
+ export const addToReadme = () => {
18
+ const { filePaths: esmFilePaths, cleanUp } = convertMjsFilesForDocs(globSync(gulpConfig.get('readme.fromEsm')))
19
+ return jsdoc2md
20
+ .render({ files: [...globSync(gulpConfig.get('readme.from')), ...esmFilePaths] })
21
+ .finally(cleanUp)
22
+ .then(
23
+ readme => fs.appendFileSync(gulpConfig.get('readme.to') + gulpConfig.get('readme.file'), readme, gulpConfig.get('readmeOptions'))
24
+ )
25
+ }