@atlaspack/core 2.12.1-canary.3354

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 (215) hide show
  1. package/LICENSE +201 -0
  2. package/index.d.ts +22 -0
  3. package/lib/AssetGraph.js +518 -0
  4. package/lib/Atlaspack.js +587 -0
  5. package/lib/AtlaspackConfig.js +298 -0
  6. package/lib/AtlaspackConfig.schema.js +125 -0
  7. package/lib/BundleGraph.js +1445 -0
  8. package/lib/CommittedAsset.js +133 -0
  9. package/lib/Dependency.js +88 -0
  10. package/lib/Environment.js +128 -0
  11. package/lib/InternalConfig.js +48 -0
  12. package/lib/PackagerRunner.js +519 -0
  13. package/lib/ReporterRunner.js +151 -0
  14. package/lib/RequestTracker.js +1089 -0
  15. package/lib/SymbolPropagation.js +625 -0
  16. package/lib/TargetDescriptor.schema.js +115 -0
  17. package/lib/Transformation.js +536 -0
  18. package/lib/UncommittedAsset.js +342 -0
  19. package/lib/Validation.js +215 -0
  20. package/lib/applyRuntimes.js +279 -0
  21. package/lib/assetUtils.js +189 -0
  22. package/lib/atlaspack-v3/AtlaspackV3.js +74 -0
  23. package/lib/atlaspack-v3/fs.js +30 -0
  24. package/lib/atlaspack-v3/index.js +19 -0
  25. package/lib/atlaspack-v3/jsCallable.js +15 -0
  26. package/lib/atlaspack-v3/plugins/Resolver.js +12 -0
  27. package/lib/atlaspack-v3/plugins/index.js +16 -0
  28. package/lib/atlaspack-v3/worker/index.js +3 -0
  29. package/lib/atlaspack-v3/worker/worker.js +30 -0
  30. package/lib/buildCache.js +18 -0
  31. package/lib/constants.js +21 -0
  32. package/lib/dumpGraphToGraphViz.js +206 -0
  33. package/lib/index.js +106 -0
  34. package/lib/loadAtlaspackPlugin.js +148 -0
  35. package/lib/loadDotEnv.js +54 -0
  36. package/lib/projectPath.js +86 -0
  37. package/lib/public/Asset.js +259 -0
  38. package/lib/public/Bundle.js +231 -0
  39. package/lib/public/BundleGraph.js +193 -0
  40. package/lib/public/BundleGroup.js +44 -0
  41. package/lib/public/Config.js +202 -0
  42. package/lib/public/Dependency.js +131 -0
  43. package/lib/public/Environment.js +244 -0
  44. package/lib/public/MutableBundleGraph.js +184 -0
  45. package/lib/public/PluginOptions.js +71 -0
  46. package/lib/public/Symbols.js +247 -0
  47. package/lib/public/Target.js +64 -0
  48. package/lib/registerCoreWithSerializer.js +45 -0
  49. package/lib/requests/AssetGraphRequest.js +427 -0
  50. package/lib/requests/AssetGraphRequestRust.js +187 -0
  51. package/lib/requests/AssetRequest.js +137 -0
  52. package/lib/requests/AtlaspackBuildRequest.js +78 -0
  53. package/lib/requests/AtlaspackConfigRequest.js +473 -0
  54. package/lib/requests/BundleGraphRequest.js +419 -0
  55. package/lib/requests/ConfigRequest.js +198 -0
  56. package/lib/requests/DevDepRequest.js +166 -0
  57. package/lib/requests/EntryRequest.js +295 -0
  58. package/lib/requests/PackageRequest.js +88 -0
  59. package/lib/requests/PathRequest.js +349 -0
  60. package/lib/requests/TargetRequest.js +1177 -0
  61. package/lib/requests/ValidationRequest.js +66 -0
  62. package/lib/requests/WriteBundleRequest.js +252 -0
  63. package/lib/requests/WriteBundlesRequest.js +153 -0
  64. package/lib/resolveOptions.js +234 -0
  65. package/lib/serializer.js +216 -0
  66. package/lib/serializerCore.browser.js +29 -0
  67. package/lib/serializerCore.js +16 -0
  68. package/lib/summarizeRequest.js +55 -0
  69. package/lib/types.js +35 -0
  70. package/lib/utils.js +160 -0
  71. package/lib/worker.js +170 -0
  72. package/package.json +59 -0
  73. package/src/AssetGraph.js +646 -0
  74. package/src/Atlaspack.js +632 -0
  75. package/src/AtlaspackConfig.js +490 -0
  76. package/src/AtlaspackConfig.schema.js +141 -0
  77. package/src/BundleGraph.js +2193 -0
  78. package/src/CommittedAsset.js +143 -0
  79. package/src/Dependency.js +142 -0
  80. package/src/Environment.js +151 -0
  81. package/src/InternalConfig.js +72 -0
  82. package/src/PackagerRunner.js +790 -0
  83. package/src/ReporterRunner.js +158 -0
  84. package/src/RequestTracker.js +1697 -0
  85. package/src/SymbolPropagation.js +794 -0
  86. package/src/TargetDescriptor.schema.js +136 -0
  87. package/src/Transformation.js +752 -0
  88. package/src/UncommittedAsset.js +426 -0
  89. package/src/Validation.js +223 -0
  90. package/src/applyRuntimes.js +341 -0
  91. package/src/assetUtils.js +254 -0
  92. package/src/atlaspack-v3/AtlaspackV3.js +73 -0
  93. package/src/atlaspack-v3/fs.js +36 -0
  94. package/src/atlaspack-v3/index.js +5 -0
  95. package/src/atlaspack-v3/jsCallable.js +13 -0
  96. package/src/atlaspack-v3/plugins/Resolver.js +9 -0
  97. package/src/atlaspack-v3/plugins/index.js +3 -0
  98. package/src/atlaspack-v3/worker/index.js +8 -0
  99. package/src/atlaspack-v3/worker/worker.js +14 -0
  100. package/src/buildCache.js +15 -0
  101. package/src/constants.js +22 -0
  102. package/src/dumpGraphToGraphViz.js +244 -0
  103. package/src/index.js +22 -0
  104. package/src/loadAtlaspackPlugin.js +239 -0
  105. package/src/loadDotEnv.js +56 -0
  106. package/src/projectPath.js +87 -0
  107. package/src/public/Asset.js +359 -0
  108. package/src/public/Bundle.js +337 -0
  109. package/src/public/BundleGraph.js +335 -0
  110. package/src/public/BundleGroup.js +55 -0
  111. package/src/public/Config.js +261 -0
  112. package/src/public/Dependency.js +176 -0
  113. package/src/public/Environment.js +316 -0
  114. package/src/public/MutableBundleGraph.js +320 -0
  115. package/src/public/PluginOptions.js +99 -0
  116. package/src/public/Symbols.js +315 -0
  117. package/src/public/Target.js +71 -0
  118. package/src/registerCoreWithSerializer.js +34 -0
  119. package/src/requests/AssetGraphRequest.js +577 -0
  120. package/src/requests/AssetGraphRequestRust.js +222 -0
  121. package/src/requests/AssetRequest.js +179 -0
  122. package/src/requests/AtlaspackBuildRequest.js +109 -0
  123. package/src/requests/AtlaspackConfigRequest.js +709 -0
  124. package/src/requests/BundleGraphRequest.js +547 -0
  125. package/src/requests/ConfigRequest.js +287 -0
  126. package/src/requests/DevDepRequest.js +246 -0
  127. package/src/requests/EntryRequest.js +385 -0
  128. package/src/requests/PackageRequest.js +105 -0
  129. package/src/requests/PathRequest.js +454 -0
  130. package/src/requests/TargetRequest.js +1632 -0
  131. package/src/requests/ValidationRequest.js +79 -0
  132. package/src/requests/WriteBundleRequest.js +362 -0
  133. package/src/requests/WriteBundlesRequest.js +209 -0
  134. package/src/resolveOptions.js +278 -0
  135. package/src/serializer.js +255 -0
  136. package/src/serializerCore.browser.js +8 -0
  137. package/src/serializerCore.js +5 -0
  138. package/src/summarizeRequest.js +47 -0
  139. package/src/types.js +581 -0
  140. package/src/utils.js +211 -0
  141. package/src/worker.js +189 -0
  142. package/test/AssetGraph.test.js +679 -0
  143. package/test/Atlaspack.test.js +142 -0
  144. package/test/AtlaspackConfig.test.js +405 -0
  145. package/test/AtlaspackConfigRequest.test.js +993 -0
  146. package/test/BundleGraph.test.js +121 -0
  147. package/test/EntryRequest.test.js +215 -0
  148. package/test/Environment.test.js +99 -0
  149. package/test/InternalAsset.test.js +76 -0
  150. package/test/PackagerRunner.test.js +27 -0
  151. package/test/PublicAsset.test.js +40 -0
  152. package/test/PublicBundle.test.js +68 -0
  153. package/test/PublicDependency.test.js +22 -0
  154. package/test/PublicEnvironment.test.js +27 -0
  155. package/test/PublicMutableBundleGraph.test.js +192 -0
  156. package/test/RequestTracker.test.js +448 -0
  157. package/test/SymbolPropagation.test.js +716 -0
  158. package/test/TargetRequest.test.js +1715 -0
  159. package/test/fixtures/application-targets/package.json +3 -0
  160. package/test/fixtures/atlaspack/index.js +1 -0
  161. package/test/fixtures/atlaspack/other.js +3 -0
  162. package/test/fixtures/atlaspack/package.json +1 -0
  163. package/test/fixtures/atlaspack/yarn.lock +0 -0
  164. package/test/fixtures/bundle.js +10 -0
  165. package/test/fixtures/common-targets/package.json +24 -0
  166. package/test/fixtures/common-targets-ignore/package.json +13 -0
  167. package/test/fixtures/config/.atlaspackrc +6 -0
  168. package/test/fixtures/config/subfolder/.atlaspackrc +6 -0
  169. package/test/fixtures/config-extends-not-found/.atlaspackrc +3 -0
  170. package/test/fixtures/config-extends-not-found/.atlaspackrc-json5 +3 -0
  171. package/test/fixtures/config-extends-not-found/.atlaspackrc-multiple +3 -0
  172. package/test/fixtures/config-extends-not-found/.atlaspackrc-node-modules +3 -0
  173. package/test/fixtures/config-malformed/.atlaspackrc +3 -0
  174. package/test/fixtures/config-node-pipeline/.atlaspackrc +6 -0
  175. package/test/fixtures/config-plugin-not-found/.atlaspackrc +6 -0
  176. package/test/fixtures/context/package.json +8 -0
  177. package/test/fixtures/custom-format-infer-ext/package.json +6 -0
  178. package/test/fixtures/custom-format-infer-type/package.json +7 -0
  179. package/test/fixtures/custom-format-mismatch/package.json +8 -0
  180. package/test/fixtures/custom-targets/package.json +20 -0
  181. package/test/fixtures/custom-targets-distdir/package.json +11 -0
  182. package/test/fixtures/duplicate-targets/package.json +4 -0
  183. package/test/fixtures/glob-like/[entry].js +0 -0
  184. package/test/fixtures/invalid-distpath/package.json +11 -0
  185. package/test/fixtures/invalid-engines/package.json +12 -0
  186. package/test/fixtures/invalid-source-missing/package.json +5 -0
  187. package/test/fixtures/invalid-source-not-file/package.json +5 -0
  188. package/test/fixtures/invalid-source-not-file/src/index.js +1 -0
  189. package/test/fixtures/invalid-target-source-missing/package.json +9 -0
  190. package/test/fixtures/invalid-target-source-not-file/package.json +9 -0
  191. package/test/fixtures/invalid-target-source-not-file/src/index.js +1 -0
  192. package/test/fixtures/invalid-targets/package.json +19 -0
  193. package/test/fixtures/library-custom-scopehoist/package.json +9 -0
  194. package/test/fixtures/library-scopehoist/package.json +8 -0
  195. package/test/fixtures/local-plugin-config-pkg/.atlaspackrc +3 -0
  196. package/test/fixtures/local-plugin-config-pkg/node_modules/atlaspack-config-local/index.json +8 -0
  197. package/test/fixtures/local-plugin-config-pkg/node_modules/atlaspack-config-local/local-plugin.js +7 -0
  198. package/test/fixtures/local-plugin-config-pkg/node_modules/atlaspack-config-local/package.json +7 -0
  199. package/test/fixtures/main-format-mismatch/package.json +8 -0
  200. package/test/fixtures/main-global/package.json +8 -0
  201. package/test/fixtures/main-mjs/package.json +8 -0
  202. package/test/fixtures/module-a.js +1 -0
  203. package/test/fixtures/module-b.js +1 -0
  204. package/test/fixtures/plugins/local-plugin.js +7 -0
  205. package/test/fixtures/plugins/node_modules/atlaspack-transformer-bad-engines/index.js +7 -0
  206. package/test/fixtures/plugins/node_modules/atlaspack-transformer-bad-engines/package.json +7 -0
  207. package/test/fixtures/plugins/node_modules/atlaspack-transformer-no-engines/index.js +7 -0
  208. package/test/fixtures/plugins/node_modules/atlaspack-transformer-no-engines/package.json +4 -0
  209. package/test/fixtures/targets-default-distdir-none/package.json +5 -0
  210. package/test/fixtures/targets-default-distdir-one/package.json +8 -0
  211. package/test/fixtures/targets-default-distdir-two/package.json +18 -0
  212. package/test/requests/ConfigRequest.test.js +254 -0
  213. package/test/serializer.test.js +302 -0
  214. package/test/test-utils.js +80 -0
  215. package/test/utils.test.js +43 -0
@@ -0,0 +1,99 @@
1
+ // @flow
2
+ import type {
3
+ BuildMode,
4
+ EnvMap,
5
+ FilePath,
6
+ LogLevel,
7
+ PluginOptions as IPluginOptions,
8
+ ServerOptions,
9
+ HMROptions,
10
+ DetailedReportOptions,
11
+ } from '@atlaspack/types';
12
+ import type {FileSystem} from '@atlaspack/fs';
13
+ import type {PackageManager} from '@atlaspack/package-manager';
14
+ import type {AtlaspackOptions} from '../types';
15
+ import {type FeatureFlags} from '@atlaspack/feature-flags';
16
+
17
+ let atlaspackOptionsToPluginOptions: WeakMap<AtlaspackOptions, PluginOptions> =
18
+ new WeakMap();
19
+
20
+ export default class PluginOptions implements IPluginOptions {
21
+ #options /*: AtlaspackOptions */;
22
+
23
+ constructor(options: AtlaspackOptions): PluginOptions {
24
+ let existing = atlaspackOptionsToPluginOptions.get(options);
25
+ if (existing != null) {
26
+ return existing;
27
+ }
28
+
29
+ this.#options = options;
30
+ atlaspackOptionsToPluginOptions.set(options, this);
31
+ return this;
32
+ }
33
+
34
+ get instanceId(): string {
35
+ return this.#options.instanceId;
36
+ }
37
+
38
+ get mode(): BuildMode {
39
+ return this.#options.mode;
40
+ }
41
+
42
+ get env(): EnvMap {
43
+ return this.#options.env;
44
+ }
45
+
46
+ get atlaspackVersion(): string {
47
+ return this.#options.atlaspackVersion;
48
+ }
49
+
50
+ get hmrOptions(): ?HMROptions {
51
+ return this.#options.hmrOptions;
52
+ }
53
+
54
+ get serveOptions(): ServerOptions | false {
55
+ return this.#options.serveOptions;
56
+ }
57
+
58
+ get shouldBuildLazily(): boolean {
59
+ return this.#options.shouldBuildLazily;
60
+ }
61
+
62
+ get shouldAutoInstall(): boolean {
63
+ return this.#options.shouldAutoInstall;
64
+ }
65
+
66
+ get logLevel(): LogLevel {
67
+ return this.#options.logLevel;
68
+ }
69
+
70
+ get cacheDir(): FilePath {
71
+ // TODO: remove this. Probably bad if there are other types of caches.
72
+ // Maybe expose the Cache object instead?
73
+ return this.#options.cacheDir;
74
+ }
75
+
76
+ get projectRoot(): FilePath {
77
+ return this.#options.projectRoot;
78
+ }
79
+
80
+ get inputFS(): FileSystem {
81
+ return this.#options.inputFS;
82
+ }
83
+
84
+ get outputFS(): FileSystem {
85
+ return this.#options.outputFS;
86
+ }
87
+
88
+ get packageManager(): PackageManager {
89
+ return this.#options.packageManager;
90
+ }
91
+
92
+ get detailedReport(): ?DetailedReportOptions {
93
+ return this.#options.detailedReport;
94
+ }
95
+
96
+ get featureFlags(): FeatureFlags {
97
+ return this.#options.featureFlags;
98
+ }
99
+ }
@@ -0,0 +1,315 @@
1
+ // @flow
2
+ import type {
3
+ Symbol as ISymbol,
4
+ MutableAssetSymbols as IMutableAssetSymbols,
5
+ AssetSymbols as IAssetSymbols,
6
+ MutableDependencySymbols as IMutableDependencySymbols,
7
+ SourceLocation,
8
+ Meta,
9
+ } from '@atlaspack/types';
10
+ import type {Asset, Dependency, AtlaspackOptions} from '../types';
11
+
12
+ import nullthrows from 'nullthrows';
13
+ import {fromInternalSourceLocation, toInternalSourceLocation} from '../utils';
14
+
15
+ const EMPTY_ITERABLE = {
16
+ [Symbol.iterator]() {
17
+ return EMPTY_ITERATOR;
18
+ },
19
+ };
20
+
21
+ const EMPTY_ITERATOR = {
22
+ next() {
23
+ return {done: true};
24
+ },
25
+ };
26
+
27
+ const inspect = Symbol.for('nodejs.util.inspect.custom');
28
+
29
+ let valueToSymbols: WeakMap<Asset, AssetSymbols> = new WeakMap();
30
+ export class AssetSymbols implements IAssetSymbols {
31
+ /*::
32
+ @@iterator(): Iterator<[ISymbol, {|local: ISymbol, loc: ?SourceLocation, meta?: ?Meta|}]> { return ({}: any); }
33
+ */
34
+ #value: Asset;
35
+ #options: AtlaspackOptions;
36
+
37
+ constructor(options: AtlaspackOptions, asset: Asset): AssetSymbols {
38
+ let existing = valueToSymbols.get(asset);
39
+ if (existing != null) {
40
+ return existing;
41
+ }
42
+
43
+ this.#value = asset;
44
+ this.#options = options;
45
+ valueToSymbols.set(asset, this);
46
+ return this;
47
+ }
48
+
49
+ hasExportSymbol(exportSymbol: ISymbol): boolean {
50
+ return Boolean(this.#value.symbols?.has(exportSymbol));
51
+ }
52
+
53
+ hasLocalSymbol(local: ISymbol): boolean {
54
+ if (this.#value.symbols == null) {
55
+ return false;
56
+ }
57
+ for (let s of this.#value.symbols.values()) {
58
+ if (local === s.local) return true;
59
+ }
60
+ return false;
61
+ }
62
+
63
+ get(
64
+ exportSymbol: ISymbol,
65
+ ): ?{|local: ISymbol, loc: ?SourceLocation, meta?: ?Meta|} {
66
+ return fromInternalAssetSymbol(
67
+ this.#options.projectRoot,
68
+ this.#value.symbols?.get(exportSymbol),
69
+ );
70
+ }
71
+
72
+ get isCleared(): boolean {
73
+ return this.#value.symbols == null;
74
+ }
75
+
76
+ exportSymbols(): Iterable<ISymbol> {
77
+ return this.#value.symbols?.keys() ?? [];
78
+ }
79
+ // $FlowFixMe
80
+ [Symbol.iterator]() {
81
+ return this.#value.symbols
82
+ ? this.#value.symbols[Symbol.iterator]()
83
+ : EMPTY_ITERATOR;
84
+ }
85
+
86
+ // $FlowFixMe
87
+ [inspect]() {
88
+ return `AssetSymbols(${
89
+ this.#value.symbols
90
+ ? [...this.#value.symbols]
91
+ .map(([s, {local}]) => `${s}:${local}`)
92
+ .join(', ')
93
+ : null
94
+ })`;
95
+ }
96
+ }
97
+
98
+ let valueToMutableAssetSymbols: WeakMap<Asset, MutableAssetSymbols> =
99
+ new WeakMap();
100
+ export class MutableAssetSymbols implements IMutableAssetSymbols {
101
+ /*::
102
+ @@iterator(): Iterator<[ISymbol, {|local: ISymbol, loc: ?SourceLocation, meta?: ?Meta|}]> { return ({}: any); }
103
+ */
104
+ #value: Asset;
105
+ #options: AtlaspackOptions;
106
+
107
+ constructor(options: AtlaspackOptions, asset: Asset): MutableAssetSymbols {
108
+ let existing = valueToMutableAssetSymbols.get(asset);
109
+ if (existing != null) {
110
+ return existing;
111
+ }
112
+ this.#value = asset;
113
+ this.#options = options;
114
+ return this;
115
+ }
116
+
117
+ // immutable
118
+
119
+ hasExportSymbol(exportSymbol: ISymbol): boolean {
120
+ return Boolean(this.#value.symbols?.has(exportSymbol));
121
+ }
122
+
123
+ hasLocalSymbol(local: ISymbol): boolean {
124
+ if (this.#value.symbols == null) {
125
+ return false;
126
+ }
127
+ for (let s of this.#value.symbols.values()) {
128
+ if (local === s.local) return true;
129
+ }
130
+ return false;
131
+ }
132
+
133
+ get(
134
+ exportSymbol: ISymbol,
135
+ ): ?{|local: ISymbol, loc: ?SourceLocation, meta?: ?Meta|} {
136
+ return fromInternalAssetSymbol(
137
+ this.#options.projectRoot,
138
+ this.#value.symbols?.get(exportSymbol),
139
+ );
140
+ }
141
+
142
+ get isCleared(): boolean {
143
+ return this.#value.symbols == null;
144
+ }
145
+
146
+ exportSymbols(): Iterable<ISymbol> {
147
+ // $FlowFixMe
148
+ return this.#value.symbols.keys();
149
+ }
150
+ // $FlowFixMe
151
+ [Symbol.iterator]() {
152
+ return this.#value.symbols
153
+ ? this.#value.symbols[Symbol.iterator]()
154
+ : EMPTY_ITERATOR;
155
+ }
156
+
157
+ // $FlowFixMe
158
+ [inspect]() {
159
+ return `MutableAssetSymbols(${
160
+ this.#value.symbols
161
+ ? [...this.#value.symbols]
162
+ .map(([s, {local}]) => `${s}:${local}`)
163
+ .join(', ')
164
+ : null
165
+ })`;
166
+ }
167
+
168
+ // mutating
169
+
170
+ ensure(): void {
171
+ if (this.#value.symbols == null) {
172
+ this.#value.symbols = new Map();
173
+ }
174
+ }
175
+
176
+ set(
177
+ exportSymbol: ISymbol,
178
+ local: ISymbol,
179
+ loc: ?SourceLocation,
180
+ meta: ?Meta,
181
+ ) {
182
+ nullthrows(this.#value.symbols).set(exportSymbol, {
183
+ local,
184
+ loc: toInternalSourceLocation(this.#options.projectRoot, loc),
185
+ meta,
186
+ });
187
+ }
188
+
189
+ delete(exportSymbol: ISymbol) {
190
+ nullthrows(this.#value.symbols).delete(exportSymbol);
191
+ }
192
+ }
193
+
194
+ let valueToMutableDependencySymbols: WeakMap<
195
+ Dependency,
196
+ MutableDependencySymbols,
197
+ > = new WeakMap();
198
+ export class MutableDependencySymbols implements IMutableDependencySymbols {
199
+ /*::
200
+ @@iterator(): Iterator<[ISymbol, {|local: ISymbol, loc: ?SourceLocation, isWeak: boolean, meta?: ?Meta|}]> { return ({}: any); }
201
+ */
202
+ #value: Dependency;
203
+ #options: AtlaspackOptions;
204
+
205
+ constructor(
206
+ options: AtlaspackOptions,
207
+ dep: Dependency,
208
+ ): MutableDependencySymbols {
209
+ let existing = valueToMutableDependencySymbols.get(dep);
210
+ if (existing != null) {
211
+ return existing;
212
+ }
213
+ this.#value = dep;
214
+ this.#options = options;
215
+ return this;
216
+ }
217
+
218
+ // immutable:
219
+
220
+ hasExportSymbol(exportSymbol: ISymbol): boolean {
221
+ return Boolean(this.#value.symbols?.has(exportSymbol));
222
+ }
223
+
224
+ hasLocalSymbol(local: ISymbol): boolean {
225
+ if (this.#value.symbols) {
226
+ for (let s of this.#value.symbols.values()) {
227
+ if (local === s.local) return true;
228
+ }
229
+ }
230
+ return false;
231
+ }
232
+
233
+ get(
234
+ exportSymbol: ISymbol,
235
+ ): ?{|local: ISymbol, loc: ?SourceLocation, isWeak: boolean, meta?: ?Meta|} {
236
+ return fromInternalDependencySymbol(
237
+ this.#options.projectRoot,
238
+ nullthrows(this.#value.symbols).get(exportSymbol),
239
+ );
240
+ }
241
+
242
+ get isCleared(): boolean {
243
+ return this.#value.symbols == null;
244
+ }
245
+
246
+ exportSymbols(): Iterable<ISymbol> {
247
+ // $FlowFixMe
248
+ return this.#value.symbols ? this.#value.symbols.keys() : EMPTY_ITERABLE;
249
+ }
250
+
251
+ // $FlowFixMe
252
+ [Symbol.iterator]() {
253
+ return this.#value.symbols
254
+ ? this.#value.symbols[Symbol.iterator]()
255
+ : EMPTY_ITERATOR;
256
+ }
257
+
258
+ // $FlowFixMe
259
+ [inspect]() {
260
+ return `MutableDependencySymbols(${
261
+ this.#value.symbols
262
+ ? [...this.#value.symbols]
263
+ .map(([s, {local, isWeak}]) => `${s}:${local}${isWeak ? '?' : ''}`)
264
+ .join(', ')
265
+ : null
266
+ })`;
267
+ }
268
+
269
+ // mutating:
270
+
271
+ ensure(): void {
272
+ if (this.#value.symbols == null) {
273
+ this.#value.symbols = new Map();
274
+ }
275
+ }
276
+
277
+ set(
278
+ exportSymbol: ISymbol,
279
+ local: ISymbol,
280
+ loc: ?SourceLocation,
281
+ isWeak: ?boolean,
282
+ ) {
283
+ let symbols = nullthrows(this.#value.symbols);
284
+ symbols.set(exportSymbol, {
285
+ local,
286
+ loc: toInternalSourceLocation(this.#options.projectRoot, loc),
287
+ isWeak: (symbols.get(exportSymbol)?.isWeak ?? true) && (isWeak ?? false),
288
+ });
289
+ }
290
+
291
+ delete(exportSymbol: ISymbol) {
292
+ nullthrows(this.#value.symbols).delete(exportSymbol);
293
+ }
294
+ }
295
+
296
+ function fromInternalAssetSymbol(projectRoot: string, value) {
297
+ return (
298
+ value && {
299
+ local: value.local,
300
+ meta: value.meta,
301
+ loc: fromInternalSourceLocation(projectRoot, value.loc),
302
+ }
303
+ );
304
+ }
305
+
306
+ function fromInternalDependencySymbol(projectRoot: string, value) {
307
+ return (
308
+ value && {
309
+ local: value.local,
310
+ meta: value.meta,
311
+ isWeak: value.isWeak,
312
+ loc: fromInternalSourceLocation(projectRoot, value.loc),
313
+ }
314
+ );
315
+ }
@@ -0,0 +1,71 @@
1
+ // @flow
2
+ import type {
3
+ FilePath,
4
+ Target as ITarget,
5
+ Environment as IEnvironment,
6
+ SourceLocation,
7
+ } from '@atlaspack/types';
8
+ import type {Target as TargetValue, AtlaspackOptions} from '../types';
9
+
10
+ import nullthrows from 'nullthrows';
11
+ import Environment from './Environment';
12
+ import {fromProjectPath} from '../projectPath';
13
+ import {fromInternalSourceLocation} from '../utils';
14
+
15
+ const inspect = Symbol.for('nodejs.util.inspect.custom');
16
+
17
+ const internalTargetToTarget: WeakMap<TargetValue, Target> = new WeakMap();
18
+ const _targetToInternalTarget: WeakMap<ITarget, TargetValue> = new WeakMap();
19
+ export function targetToInternalTarget(target: ITarget): TargetValue {
20
+ return nullthrows(_targetToInternalTarget.get(target));
21
+ }
22
+
23
+ export default class Target implements ITarget {
24
+ #target /*: TargetValue */;
25
+ #options /*: AtlaspackOptions */;
26
+
27
+ constructor(target: TargetValue, options: AtlaspackOptions): Target {
28
+ let existing = internalTargetToTarget.get(target);
29
+ if (existing != null) {
30
+ return existing;
31
+ }
32
+
33
+ this.#target = target;
34
+ this.#options = options;
35
+ _targetToInternalTarget.set(this, target);
36
+ internalTargetToTarget.set(target, this);
37
+ return this;
38
+ }
39
+
40
+ get distEntry(): ?FilePath {
41
+ return this.#target.distEntry;
42
+ }
43
+
44
+ get distDir(): FilePath {
45
+ return fromProjectPath(this.#options.projectRoot, this.#target.distDir);
46
+ }
47
+
48
+ get env(): IEnvironment {
49
+ return new Environment(this.#target.env, this.#options);
50
+ }
51
+
52
+ get name(): string {
53
+ return this.#target.name;
54
+ }
55
+
56
+ get publicUrl(): string {
57
+ return this.#target.publicUrl;
58
+ }
59
+
60
+ get loc(): ?SourceLocation {
61
+ return fromInternalSourceLocation(
62
+ this.#options.projectRoot,
63
+ this.#target.loc,
64
+ );
65
+ }
66
+
67
+ // $FlowFixMe[unsupported-syntax]
68
+ [inspect](): string {
69
+ return `Target(${this.name} - ${this.env[inspect]()})`;
70
+ }
71
+ }
@@ -0,0 +1,34 @@
1
+ // @flow
2
+ import {Graph} from '@atlaspack/graph';
3
+ import {registerSerializableClass} from './serializer';
4
+ import AssetGraph from './AssetGraph';
5
+ import BundleGraph from './BundleGraph';
6
+ import AtlaspackConfig from './AtlaspackConfig';
7
+ import {RequestGraph} from './RequestTracker';
8
+ import Config from './public/Config';
9
+ import packageJson from '../package.json';
10
+
11
+ let coreRegistered;
12
+ export function registerCoreWithSerializer() {
13
+ if (coreRegistered) {
14
+ return;
15
+ }
16
+ const packageVersion: mixed = packageJson.version;
17
+ if (typeof packageVersion !== 'string') {
18
+ throw new Error('Expected package version to be a string');
19
+ }
20
+
21
+ // $FlowFixMe[incompatible-cast]
22
+ for (let [name, ctor] of (Object.entries({
23
+ AssetGraph,
24
+ Config,
25
+ BundleGraph,
26
+ Graph,
27
+ AtlaspackConfig,
28
+ RequestGraph,
29
+ // $FlowFixMe[unclear-type]
30
+ }): Array<[string, Class<any>]>)) {
31
+ registerSerializableClass(packageVersion + ':' + name, ctor);
32
+ }
33
+ coreRegistered = true;
34
+ }