@fontoxml/fontoxml-development-tools 3.8.1 → 3.9.0-beta.3

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 (148) hide show
  1. package/bitbucket-pipelines.yml +7 -0
  2. package/npm-shrinkwrap.json +14865 -23377
  3. package/package.json +14 -16
  4. package/src/addModulesToApp.js +1 -1
  5. package/src/editorVersions.js +23 -0
  6. package/src/modules/connectors/index.js +1 -1
  7. package/src/modules/core/src/command.module.js +1 -1
  8. package/src/modules/editor/dev-cms/connectors-cms-standard/configureAssetPostRouteHandler.js +0 -11
  9. package/src/modules/editor/dev-cms/connectors-cms-standard/configureConnectorsCmsStandardAssetRouter.js +0 -3
  10. package/src/modules/editor/index.js +1 -1
  11. package/src/modules/editor/src/commands/command.run.controller.js +12 -7
  12. package/src/modules/editor/src/getWebpackConfig.js +160 -446
  13. package/src/modules/editor/src/getWebpackDevMiddlewareConfig.js +9 -16
  14. package/src/modules/editor/src/helpers/getNamesAndPaths.js +167 -0
  15. package/src/modules/editor/src/helpers/normalisePath.js +2 -2
  16. package/src/modules/editor/src/templates/app-entry.ts +66 -0
  17. package/src/modules/editor/src/templates/package.json +3 -0
  18. package/src/modules/editor/src/webpackLoaders/generatedLoader.cjs +88 -65
  19. package/src/modules/editor/src/webpackLoaders/platformSourceMapLoader.cjs +8 -10
  20. package/src/modules/editor/src/webpackLoaders/symbolLoader.cjs +7 -7
  21. package/src/modules/editor/src/webpackLoaders/vendorsSourceMapLoader.cjs +3 -5
  22. package/src/modules/editor/src/webpackPlugins/CopyPlugin.js +237 -171
  23. package/src/modules/editor/src/webpackPlugins/DependenciesInLoadOrderPlugin.js +12 -4
  24. package/src/modules/editor/src/webpackPlugins/FdtOutputPlugin.js +95 -102
  25. package/src/modules/editor/src/webpackPlugins/RemoveExplicitExtensionResolvePlugin.js +32 -21
  26. package/src/modules/editor/src/webpackPlugins/ResolveImportAliasPlugin.js +18 -10
  27. package/src/modules/editor/src/webpackPlugins/UnitTestPlugin.js +24 -15
  28. package/src/modules/editor/test/fixtures.test.js +0 -3
  29. package/src/modules/editor-pre-7-7-0/instanceTemplate/packages/editor-masthead/src/Masthead.jsx +30 -33
  30. package/src/modules/editor-pre-7-7-0/instanceTemplate/packages/editor-masthead/src/install.js +2 -2
  31. package/src/modules/editor-pre-7-7-0/instanceTemplate/packages/editor-masthead/src/toolbars/ExampleToolbar.jsx +4 -4
  32. package/src/modules/{editor/test/fixtures/dependencyWatching/newPackage/canAddANewEmptyAppPackage/generatedSetdefaultconfiguration.out.js → editor-pre-7-7-0/instanceTemplateTypeScript/config/.gitkeep} +0 -0
  33. package/src/modules/editor-pre-7-7-0/instanceTemplateTypeScript/config.js +12 -0
  34. package/src/modules/{editor/test/fixtures/dependencyWatching/newPackage/canAddANewEmptyAppPackage/generatedStyles.out.js → editor-pre-7-7-0/instanceTemplateTypeScript/dev-cms/files/.gitkeep} +0 -0
  35. package/src/modules/editor-pre-7-7-0/instanceTemplateTypeScript/packages/editor-masthead/src/Masthead.tsx +39 -0
  36. package/src/modules/editor-pre-7-7-0/instanceTemplateTypeScript/packages/editor-masthead/src/install.ts +7 -0
  37. package/src/modules/editor-pre-7-7-0/instanceTemplateTypeScript/packages/editor-masthead/src/toolbars/ExampleToolbar.tsx +20 -0
  38. package/src/modules/{editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveAllSpecialFilesFromPackage/generatedSetDefaultConfiguration.out.js → editor-pre-7-7-0/instanceTemplateTypeScript/platform/.gitkeep} +0 -0
  39. package/src/modules/editor-pre-7-7-0/instanceTemplateTypeScript/tsconfig.json +6 -0
  40. package/src/modules/editor-pre-7-7-0/src/api/init/checkEditorDestination.js +1 -0
  41. package/src/modules/editor-pre-7-7-0/src/api/init/createConfigConfiguration.js +42 -18
  42. package/src/modules/editor-pre-7-7-0/src/api/init/createSchemaExperienceResolver.js +19 -15
  43. package/src/modules/editor-pre-7-7-0/src/api/schema/buildElementConfigurations.js +70 -0
  44. package/src/modules/editor-pre-7-7-0/src/api/schema/checkIfCompiledSchemaOverwritesFiles.js +5 -5
  45. package/src/modules/editor-pre-7-7-0/src/api/schema/createSchemaExperiencePackages.js +122 -86
  46. package/src/modules/editor-pre-7-7-0/src/api/schema/createSchemaPackages.js +32 -26
  47. package/src/modules/editor-pre-7-7-0/src/command.init.controller.js +20 -13
  48. package/src/modules/editor-pre-7-7-0/src/command.init.js +6 -0
  49. package/src/modules/editor-pre-7-7-0/src/command.upgrade.controller.js +25 -0
  50. package/src/modules/editor-pre-7-7-0/test/api/init/createConfigConfiguration.test.js +47 -0
  51. package/src/modules/editor-pre-7-7-0/test/api/schema/buildElementConfigurations.test.js +119 -0
  52. package/src/modules/editor-pre-7-7-0/test/api/schema/zipSchemaSource.test.js +20 -1
  53. package/src/modules/editor/dev-cms/connectors-cms-standard/configureAssetGetRouteHandler.js +0 -29
  54. package/src/modules/editor/src/templates/app-entry.cjs +0 -69
  55. package/src/modules/editor/test/apps/minimal/config/configuration.js +0 -5
  56. package/src/modules/editor/test/apps/minimal/config/fonto-manifest.json +0 -6
  57. package/src/modules/editor/test/apps/minimal/config/schemaExperienceResolver.js +0 -15
  58. package/src/modules/editor/test/apps/minimal/packages/app-test/src/SCHEMA_LOCATIONS.js +0 -1
  59. package/src/modules/editor/test/apps/minimal/packages/app-test/src/install.js +0 -3
  60. package/src/modules/editor/test/apps/minimal/platform/fontoxml-configuration/fonto-manifest.json +0 -4
  61. package/src/modules/editor/test/apps/minimal/platform/fontoxml-configuration/src/configurationManager.js +0 -11
  62. package/src/modules/editor/test/apps/minimal/platform/fontoxml-editor/fonto-manifest.json +0 -4
  63. package/src/modules/editor/test/apps/minimal/platform/fontoxml-editor/src/editor/Router.jsx +0 -1
  64. package/src/modules/editor/test/apps/minimal/platform/fontoxml-editor/src/renderApp.js +0 -5
  65. package/src/modules/editor/test/apps/minimal/platform/fontoxml-localization/fonto-manifest.json +0 -4
  66. package/src/modules/editor/test/apps/minimal/platform/fontoxml-localization/src/localizationManager.js +0 -3
  67. package/src/modules/editor/test/apps/minimal/platform/fontoxml-modular-schema-experience/fonto-manifest.json +0 -4
  68. package/src/modules/editor/test/apps/minimal/platform/fontoxml-modular-schema-experience/src/sxManager.js +0 -13
  69. package/src/modules/editor/test/apps/minimal/platform/fontoxml-operations/fonto-manifest.json +0 -4
  70. package/src/modules/editor/test/apps/minimal/platform/fontoxml-operations/src/operationsManager.js +0 -3
  71. package/src/modules/editor/test/apps/minimal/platform/fontoxml-platform-base/fonto-manifest.json +0 -7
  72. package/src/modules/editor/test/apps/minimal/platform/fontoxml-platform-base/src/configureSxModule.js +0 -3
  73. package/src/modules/editor/test/apps/minimal/platform/fontoxml-platform-package/fonto-manifest.json +0 -4
  74. package/src/modules/editor/test/apps/minimal/platform/fontoxml-platform-package/src/install.js +0 -3
  75. package/src/modules/editor/test/apps/minimal/platform/fontoxml-selectors/fonto-manifest.json +0 -4
  76. package/src/modules/editor/test/apps/minimal/platform/fontoxml-selectors/src/registerXQueryModule.js +0 -1
  77. package/src/modules/editor/test/apps/minimal/platform/fontoxml-shims/fonto-manifest.json +0 -4
  78. package/src/modules/editor/test/apps/minimal/platform/fontoxml-shims/src/main.js +0 -1
  79. package/src/modules/editor/test/apps/minimal/platform/fontoxml-utils/fonto-manifest.json +0 -4
  80. package/src/modules/editor/test/apps/minimal/platform/fontoxml-utils/src/getQueryParameterByName.js +0 -1
  81. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/fonto-manifest.json +0 -4
  82. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/src/glamor.js +0 -12
  83. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/src/react-dom.js +0 -6
  84. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/src/react-dom.min.js +0 -6
  85. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/src/react.js +0 -1
  86. package/src/modules/editor/test/apps/minimal/platform/fontoxml-vendors/src/react.min.js +0 -1
  87. package/src/modules/editor/test/dependecyWatching.test.js +0 -741
  88. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddAllSpecialFilesToPackage/generatedConfigureSxModule.out.js +0 -26
  89. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddAllSpecialFilesToPackage/generatedInstall.out.js +0 -13
  90. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddAllSpecialFilesToPackage/generatedMessages.out.js +0 -7
  91. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddAllSpecialFilesToPackage/generatedSetDefaultConfiguration.out.js +0 -3
  92. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddAllSpecialFilesToPackage/generatedStyles.out.js +0 -1
  93. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddConfiguresxmoduleToPackage/generatedConfigureSxModule.out.js +0 -26
  94. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddInstallToPackage/generatedInstall.out.js +0 -9
  95. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddMessagesEoToPackage/generatedMessages.out.js +0 -5
  96. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddMessagesToPackage/generatedMessages.out.js +0 -5
  97. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddOperationsToPackage/generatedInstall.out.js +0 -9
  98. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddOperationsWildcardToPackage/generatedInstall.out.js +0 -9
  99. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddSetdefaultconfigurationToPackage/generatedSetDefaultConfiguration.out.js +0 -3
  100. package/src/modules/editor/test/fixtures/dependencyWatching/addSpecialFileToExistingPackage/canAddStylesToPackage/generatedStyles.out.js +0 -1
  101. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewEmptyAppPackage/generatedConfigureSxModule.out.js +0 -20
  102. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewEmptyAppPackage/generatedInstall.out.js +0 -7
  103. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewEmptyAppPackage/generatedMessages.out.js +0 -1
  104. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageAsConfigDependency/generatedInstall.out.js +0 -9
  105. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageAsConfigDependency/generatedInstallBefore.out.js +0 -7
  106. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageAsOtherPackageDependency/generatedInstall.out.js +0 -9
  107. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageAsOtherPackageDependency/generatedInstallBefore.out.js +0 -7
  108. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageWithSpecialFiles/generatedConfigureSxModule.out.js +0 -26
  109. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageWithSpecialFiles/generatedInstall.out.js +0 -13
  110. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageWithSpecialFiles/generatedMessages.out.js +0 -7
  111. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageWithSpecialFiles/generatedSetDefaultConfiguration.out.js +0 -3
  112. package/src/modules/editor/test/fixtures/dependencyWatching/newPackage/canAddANewPackageWithSpecialFiles/generatedStyles.out.js +0 -1
  113. package/src/modules/editor/test/fixtures/dependencyWatching/overridePackage/canAddANewOverridePackage/overrideRenderApp.out.js +0 -3
  114. package/src/modules/editor/test/fixtures/dependencyWatching/overridePackage/canRemoveAnOverridePackage/overrideRenderApp.out.js +0 -3
  115. package/src/modules/editor/test/fixtures/dependencyWatching/overridePackage/canRemoveAnOverridePackage/renderApp.out.js +0 -3
  116. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/beforeEachHook/generatedConfigureSxModule.out.js +0 -26
  117. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/beforeEachHook/generatedInstall.out.js +0 -13
  118. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/beforeEachHook/generatedMessages.out.js +0 -7
  119. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/beforeEachHook/generatedSetDefaultConfiguration.out.js +0 -3
  120. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/beforeEachHook/generatedStyles.out.js +0 -1
  121. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveAllSpecialFilesFromPackage/generatedConfigureSxModule.out.js +0 -23
  122. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveAllSpecialFilesFromPackage/generatedInstall.out.js +0 -7
  123. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveAllSpecialFilesFromPackage/generatedMessages.out.js +0 -1
  124. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveAllSpecialFilesFromPackage/generatedStyles.out.js +0 -0
  125. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveConfiguresxmoduleFromPackage/generatedConfigureSxModule.out.js +0 -23
  126. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveInstallFromPackage/generatedInstall.out.js +0 -11
  127. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveMessagesEoFromPackage/generatedMessages.out.js +0 -5
  128. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveMessagesFromPackage/generatedMessages.out.js +0 -5
  129. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveOperationsFromPackage/generatedInstall.out.js +0 -11
  130. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveOperationsWildcardFromPackage/generatedInstall.out.js +0 -11
  131. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveSetDefaultConfigurationFromPackage/generatedSetDefaultConfiguration.out.js +0 -0
  132. package/src/modules/editor/test/fixtures/dependencyWatching/removeSpecialFileFromExistingPackage/canRemoveStylesFromPackage/generatedStyles.out.js +0 -0
  133. package/src/modules/editor/test/fixtures/dependencyWatching/removedPackage/beforeEachHook/generatedInstall.out.js +0 -9
  134. package/src/modules/editor/test/fixtures/dependencyWatching/removedPackage/canRemoveAPackage/generatedInstall.out.js +0 -7
  135. package/src/modules/editor/test/fixtures/dependencyWatching/removedPackage/canRemovePackageFromConfigManifest/generatedInstall.out.js +0 -7
  136. package/src/modules/editor/test/fixtures/dependencyWatching/removedPackage/canRemovePackageFromOtherPackageManifest/generatedInstall.out.js +0 -9
  137. package/src/modules/editor/test/fixtures/dependencyWatching/removedPackage/canRemovePackageFromOtherPackageManifest/generatedInstallBefore.out.js +0 -11
  138. package/src/modules/editor/test/helpers/appMutations/addFilesToPackage.js +0 -105
  139. package/src/modules/editor/test/helpers/appMutations/addFontoManifestToPackage.js +0 -46
  140. package/src/modules/editor/test/helpers/appMutations/addPackage.js +0 -53
  141. package/src/modules/editor/test/helpers/appMutations/generateSpecialFiles.js +0 -59
  142. package/src/modules/editor/test/helpers/appMutations/mutateConfigFontoManifest.js +0 -49
  143. package/src/modules/editor/test/helpers/appMutations/mutatePackageFontoManifest.js +0 -67
  144. package/src/modules/editor/test/helpers/appMutations/removeFilesFromPackage.js +0 -33
  145. package/src/modules/editor/test/helpers/appMutations/removePackage.js +0 -33
  146. package/src/modules/editor/test/helpers/createAppStructure.js +0 -17
  147. package/src/modules/editor/test/helpers/createTempDirectory.js +0 -20
  148. package/src/modules/editor/test/helpers/createWebpackWatch.js +0 -444
@@ -1,444 +0,0 @@
1
- import assert from 'assert';
2
- import EventEmitter from 'events';
3
- import express from 'express';
4
- import mocha from 'mocha';
5
- import path from 'path';
6
- import webpack from 'webpack';
7
- import webpackDevMiddleware from 'webpack-dev-middleware';
8
-
9
- import setupDevCms from '../../dev-cms/setupDevCms.js';
10
- import { fromSnakeCaseToCamelCase } from '../../src/convert.js';
11
- import getWebpackConfig from '../../src/getWebpackConfig.js';
12
- import getWebpackDevMiddlewareConfig from '../../src/getWebpackDevMiddlewareConfig.js';
13
- import assertFixtureSnapshot from './assertFixtureSnapshot.js';
14
- import createAppStructure from './createAppStructure.js';
15
- import createTempDirectory from './createTempDirectory.js';
16
-
17
- const mochaColoring = mocha.reporters.Base.color;
18
- class WebpackWatch {
19
- constructor(options) {
20
- this.options = options;
21
-
22
- this.compiler = null;
23
- this.contextPath = null;
24
- this.eventEmitter = null;
25
- this.mutationBusyCount = 0;
26
- this.server = null;
27
- this.httpServer = null;
28
- this.tempDirCleanup = null;
29
-
30
- this.started = false;
31
- }
32
-
33
- async start() {
34
- // Guard against already started.
35
- if (this.started) {
36
- throw new Error('Webpack watch test already started.');
37
- }
38
- this.started = true;
39
-
40
- const tmpDir = await createTempDirectory();
41
- this.contextPath = tmpDir.path;
42
- this.tempDirCleanup = tmpDir.cleanupCallback;
43
- const options = {
44
- appTemplateType: 'minimal',
45
- inDevelopmentMode: true,
46
- };
47
-
48
- await createAppStructure(this.contextPath, options.appTemplateType);
49
-
50
- const appConfig = {
51
- root: this.contextPath,
52
- port: 41983,
53
- };
54
- const appManifest = {
55
- _rawLoaderExtensions: [],
56
- };
57
- const webpackConfigDevelopment = getWebpackConfig(
58
- appConfig,
59
- appManifest,
60
- options
61
- );
62
-
63
- this.compiler = webpack(webpackConfigDevelopment);
64
-
65
- // this.compiler.hooks.compile.tap('webpack-watch-test', invalidPlugin);
66
- // this.compiler.hooks.invalid.tap('webpack-watch-test', invalidPlugin);
67
- const compilerDoneEvents = new EventEmitter();
68
- this.compiler.hooks.done.tap('webpack-watch-test', (rawStats) => {
69
- const stats = rawStats.toJson({
70
- all: false,
71
- hash: true,
72
- assets: true,
73
- warnings: true,
74
- errors: true,
75
- errorDetails: false,
76
- });
77
-
78
- const shouldEmit =
79
- // !force &&
80
- stats &&
81
- (!stats.errors || stats.errors.length === 0) &&
82
- stats.assets &&
83
- stats.assets.every((asset) => !asset.emitted);
84
-
85
- if (shouldEmit) {
86
- compilerDoneEvents.emit('message', {
87
- type: 'still-ok',
88
- data: rawStats,
89
- });
90
- return;
91
- }
92
-
93
- if (stats.errors.length > 0) {
94
- compilerDoneEvents.emit('message', {
95
- type: 'errors',
96
- data: stats.errors,
97
- });
98
- } else if (stats.warnings.length > 0) {
99
- compilerDoneEvents.emit('message', {
100
- type: 'warnings',
101
- data: stats.warnings,
102
- });
103
- } else {
104
- compilerDoneEvents.emit('message', {
105
- type: 'ok',
106
- data: rawStats,
107
- });
108
- }
109
- });
110
-
111
- const webpackDevMiddlewareConfig =
112
- getWebpackDevMiddlewareConfig(appConfig);
113
- webpackDevMiddlewareConfig.logLevel = 'silent';
114
- webpackDevMiddlewareConfig.stats = 'none';
115
- webpackDevMiddlewareConfig.watchOptions.aggregateTimeout =
116
- this.options.aggregateTimeout;
117
- webpackDevMiddlewareConfig.watchOptions.poll = this.options.poll;
118
-
119
- this.server = express();
120
- this.middleware = webpackDevMiddleware(
121
- this.compiler,
122
- getWebpackDevMiddlewareConfig(appConfig)
123
- );
124
- this.server.use(await setupDevCms(appConfig), this.middleware);
125
-
126
- this.eventEmitter = new EventEmitter();
127
-
128
- // We don't actually need the server or webpack dev middleware to run, but it does some
129
- // convenient bootstrapping we can use.
130
- await new Promise((resolve, reject) => {
131
- this.httpServer = this.server.listen(
132
- appConfig.port,
133
- '0.0.0.0',
134
- (error) => {
135
- if (error) {
136
- reject(error);
137
- return;
138
- }
139
- resolve();
140
- }
141
- );
142
- });
143
-
144
- await new Promise((resolve, reject) => {
145
- let isDone = false;
146
- const compilerEventListener = ({ type, data }) => {
147
- if (isDone) {
148
- if (!this.mutationBusyCount) {
149
- throw new Error(
150
- `Webpack event "${type}" happened while not busy with a mutation.`
151
- );
152
- }
153
-
154
- this.eventEmitter.emit(type, data);
155
- return;
156
- }
157
-
158
- switch (type) {
159
- case 'still-ok':
160
- case 'ok':
161
- isDone = true;
162
- resolve(data);
163
- return;
164
- case 'warning':
165
- case 'warnings':
166
- case 'error':
167
- case 'errors':
168
- case 'close':
169
- isDone = true;
170
- reject((data && data[0]) || data);
171
-
172
- case 'invalid':
173
- // Updating...
174
-
175
- default:
176
- }
177
- };
178
- compilerDoneEvents.on('message', compilerEventListener);
179
- });
180
- }
181
-
182
- async stop() {
183
- await new Promise((resolve) => this.middleware.close(resolve));
184
-
185
- await new Promise((resolve) => this.httpServer.close(resolve));
186
-
187
- if (this.tempDirCleanup) {
188
- await this.tempDirCleanup();
189
- }
190
-
191
- // Reset event listeners.
192
- if (this.eventEmitter) {
193
- this.eventEmitter.removeAllListeners();
194
- }
195
-
196
- this.mutationBusyCount = 0;
197
-
198
- // Some tests seem to fail if we not wait a bit.
199
- await new Promise((resolve) =>
200
- setTimeout(resolve, this.options.waitTime)
201
- );
202
-
203
- this.started = false;
204
- }
205
-
206
- webpackMutation(callback) {
207
- this.mutationBusyCount++;
208
- return new Promise(async (resolve, reject) => {
209
- let callbackCompleted = false;
210
- let doneType = false;
211
- let doneData;
212
-
213
- // eslint-disable-next-line prefer-const
214
- let doneHandlerOk;
215
- let doneHandlerStillOk;
216
- let doneHandlerErrors;
217
- let doneHandlerWarnings;
218
-
219
- const doneHandler = (type, data) => {
220
- if (!callbackCompleted) {
221
- // Wait for the next done-like event.
222
- // TODO: Merge errors/warnings?
223
- return;
224
- // throw new Error(`Compiler emitted "${type}" before the mutation was finished, might be a timing issue.`);
225
- }
226
-
227
- this.eventEmitter.removeListener('ok', doneHandlerOk);
228
- this.eventEmitter.removeListener(
229
- 'still-ok',
230
- doneHandlerStillOk
231
- );
232
- this.eventEmitter.removeListener('errors', doneHandlerErrors);
233
- this.eventEmitter.removeListener(
234
- 'warnings',
235
- doneHandlerWarnings
236
- );
237
-
238
- doneType = type;
239
- doneData = data;
240
- };
241
-
242
- doneHandlerOk = doneHandler.bind(undefined, 'ok');
243
- doneHandlerStillOk = doneHandler.bind(undefined, 'still-ok');
244
- doneHandlerErrors = doneHandler.bind(undefined, 'errors');
245
- doneHandlerWarnings = doneHandler.bind(undefined, 'warnings');
246
-
247
- this.eventEmitter.addListener('ok', doneHandlerOk);
248
- this.eventEmitter.addListener('still-ok', doneHandlerStillOk);
249
- this.eventEmitter.addListener('errors', doneHandlerErrors);
250
- this.eventEmitter.addListener('warnings', doneHandlerWarnings);
251
-
252
- // Some tests seem to fail if we not wait a bit.
253
- await new Promise((timeoutResolve) =>
254
- setTimeout(timeoutResolve, this.options.waitTime)
255
- );
256
-
257
- // Perform the mutations.
258
- await callback.call(undefined, this);
259
- callbackCompleted = true;
260
-
261
- // Some tests seem to fail if we not wait a bit.
262
- await new Promise((timeoutResolve) =>
263
- setTimeout(timeoutResolve, this.options.waitTime)
264
- );
265
-
266
- // Listen for rebuild done.
267
- let doneCheckIntervalCount = 0;
268
- const doneCheckInterval = setInterval(() => {
269
- if (
270
- !doneType &&
271
- doneCheckIntervalCount < this.options.doneCheckIntervalLimit
272
- ) {
273
- doneCheckIntervalCount++;
274
- return;
275
- }
276
-
277
- // Clear the interval.
278
- clearInterval(doneCheckInterval);
279
-
280
- // Make sure we cleanup the listeners.
281
- this.eventEmitter.removeListener('ok', doneHandlerOk);
282
- this.eventEmitter.removeListener(
283
- 'still-ok',
284
- doneHandlerStillOk
285
- );
286
- this.eventEmitter.removeListener('errors', doneHandlerErrors);
287
- this.eventEmitter.removeListener(
288
- 'warnings',
289
- doneHandlerWarnings
290
- );
291
-
292
- if (!doneType) {
293
- reject(new Error('Mutation did not trigger compile.'));
294
- return;
295
- }
296
-
297
- if (doneType !== 'ok' && doneType !== 'still-ok') {
298
- reject(
299
- new Error(
300
- doneData
301
- ? doneData[0]
302
- : new Error(`Watch due to "${doneType}".`)
303
- )
304
- );
305
- return;
306
- }
307
-
308
- // Get the latest stats from the ok event.
309
- const stats = doneData;
310
-
311
- // console.log('stats compare', stats === this._lastStats ? 'same' : (this._lastStats ? 'changed' : 'first'));
312
- this._lastStats = stats;
313
-
314
- resolve(stats);
315
- }, this.options.doneCheckInterval);
316
- }).catch((error) => {
317
- this.mutationBusyCount--;
318
-
319
- throw error;
320
- });
321
- }
322
-
323
- getModuleFromStats(stats, srcPath) {
324
- const modules = stats.toJson({ all: true }).modules;
325
-
326
- // console.log(modules.filter(module => module.name.endsWith(srcPath)).map(m => m.name));
327
-
328
- return modules.find((emittedModule) => {
329
- return emittedModule.name.endsWith(srcPath);
330
- });
331
- }
332
-
333
- getSnapshotPath(testFunction, parts, extension = '.js') {
334
- if (
335
- !testFunction ||
336
- !testFunction.test ||
337
- !testFunction.test.titlePath
338
- ) {
339
- throw new Error(
340
- 'Cannot get snapshot path without a test function.'
341
- );
342
- }
343
-
344
- if (!Array.isArray(parts)) {
345
- parts = [parts];
346
- }
347
-
348
- parts = [].concat(testFunction.test.titlePath(), parts).map((part) => {
349
- part = part.charAt(0).toLowerCase() + part.slice(1);
350
- return fromSnakeCaseToCamelCase(
351
- part.replace(/([^\w]|\s|_)+/g, '-')
352
- );
353
- });
354
-
355
- parts[parts.length - 1] += `.out${extension}`;
356
- return path.join(__dirname, '..', 'fixtures', ...parts);
357
- }
358
-
359
- async runDependencyTest(
360
- testFunction,
361
- outputModulesToTest,
362
- mutationCallback
363
- ) {
364
- // Increase timeouts on every test retry.
365
- if (
366
- testFunction &&
367
- testFunction.test &&
368
- testFunction.test._currentRetry >= 1
369
- ) {
370
- this.options.waitTime += testFunction.test._currentRetry * 500;
371
- this.options.doneCheckIntervalLimit += Math.round(
372
- (testFunction.test._currentRetry * 2000) /
373
- this.options.doneCheckInterval
374
- );
375
- console.warn(
376
- mochaColoring(
377
- 'light',
378
- `${' '.repeat(
379
- testFunction.test.titlePath().length
380
- )}- Retrying "${testFunction.test.title}" (wait: ${
381
- this.options.waitTime
382
- }, done check: ${this.options.doneCheckInterval} * ${
383
- this.options.doneCheckIntervalLimit
384
- })...`
385
- )
386
- );
387
- }
388
-
389
- // Perform the mutation.
390
- const stats = await this.webpackMutation(mutationCallback);
391
-
392
- // Test results.
393
- await Promise.all(
394
- outputModulesToTest.map(async (outputModuleToTest) => {
395
- if (Array.isArray(outputModuleToTest)) {
396
- outputModuleToTest = {
397
- filename: outputModuleToTest[0],
398
- snapshot: outputModuleToTest[1],
399
- };
400
- }
401
- const outputModule = this.getModuleFromStats(
402
- stats,
403
- outputModuleToTest.filename
404
- );
405
- assert.ok(outputModule);
406
- await assertFixtureSnapshot(
407
- outputModule.source,
408
- this.getSnapshotPath(
409
- testFunction,
410
- outputModuleToTest.snapshot
411
- )
412
- );
413
- })
414
- );
415
-
416
- // TODO: Check stats for correct file changes?
417
- // TODO: Check if output special file contains the correct output?
418
- }
419
- }
420
-
421
- const DEFAULT_OPTIONS = {
422
- aggregateTimeout: 300,
423
- appTemplateType: 'minimal',
424
- doneCheckInterval: 20,
425
- doneCheckIntervalLimit: 100,
426
- inDevelopmentMode: true,
427
- poll: false,
428
- startupWaitTime: 50,
429
- waitTime: 20,
430
- };
431
-
432
- export default async function createWebpackWatch(options = {}) {
433
- options = { ...DEFAULT_OPTIONS, ...options };
434
-
435
- const instance = new WebpackWatch(options);
436
- await instance.start();
437
-
438
- // Some tests seem to fail if we not wait a bit.
439
- await new Promise((resolve) =>
440
- setTimeout(resolve, options.startupWaitTime)
441
- );
442
-
443
- return instance;
444
- }