Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.0 KiB
192 lines
5.0 KiB
// @flow strict-local
|
|
|
|
import type {Dependency} from '@parcel/types';
|
|
|
|
import assert from 'assert';
|
|
import invariant from 'assert';
|
|
import InternalBundleGraph from '../src/BundleGraph';
|
|
import MutableBundleGraph from '../src/public/MutableBundleGraph';
|
|
import {DEFAULT_ENV, DEFAULT_TARGETS, DEFAULT_OPTIONS} from './test-utils';
|
|
import AssetGraph, {nodeFromAssetGroup} from '../src/AssetGraph';
|
|
import {createAsset as _createAsset} from '../src/assetUtils';
|
|
import {createDependency as _createDependency} from '../src/Dependency';
|
|
import nullthrows from 'nullthrows';
|
|
import {toProjectPath} from '../src/projectPath';
|
|
|
|
function createAsset(opts) {
|
|
return _createAsset('/', opts);
|
|
}
|
|
|
|
function createDependency(opts) {
|
|
return _createDependency('/', opts);
|
|
}
|
|
|
|
const id1 = '0123456789abcdef0123456789abcdef';
|
|
const id2 = '9876543210fedcba9876543210fedcba';
|
|
|
|
describe('PublicMutableBundleGraph', () => {
|
|
it('creates publicIds for bundles', () => {
|
|
let internalBundleGraph = InternalBundleGraph.fromAssetGraph(
|
|
createMockAssetGraph(),
|
|
);
|
|
let mutableBundleGraph = new MutableBundleGraph(
|
|
internalBundleGraph,
|
|
DEFAULT_OPTIONS,
|
|
);
|
|
|
|
mutableBundleGraph.traverse(node => {
|
|
if (
|
|
node.type === 'dependency' &&
|
|
mutableBundleGraph.getResolvedAsset(node.value)
|
|
) {
|
|
let target = nullthrows(node.value.target);
|
|
let group = mutableBundleGraph.createBundleGroup(node.value, target);
|
|
let resolved = mutableBundleGraph.getResolvedAsset(node.value);
|
|
if (resolved != null) {
|
|
mutableBundleGraph.addBundleToBundleGroup(
|
|
mutableBundleGraph.createBundle({
|
|
entryAsset: resolved,
|
|
target,
|
|
}),
|
|
group,
|
|
);
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.deepEqual(
|
|
internalBundleGraph.getBundles().map(b => b.publicId),
|
|
['8LVYC', 'd7Pd5'],
|
|
);
|
|
});
|
|
|
|
it('is safe to add a bundle to a bundleGroup multiple times', () => {
|
|
let internalBundleGraph = InternalBundleGraph.fromAssetGraph(
|
|
createMockAssetGraph(),
|
|
);
|
|
let mutableBundleGraph = new MutableBundleGraph(
|
|
internalBundleGraph,
|
|
DEFAULT_OPTIONS,
|
|
);
|
|
|
|
let dependency: Dependency;
|
|
mutableBundleGraph.traverse((node, _, actions) => {
|
|
if (node.type === 'dependency') {
|
|
dependency = node.value;
|
|
actions.stop();
|
|
}
|
|
});
|
|
|
|
invariant(dependency != null);
|
|
|
|
let target = nullthrows(dependency.target);
|
|
let bundleGroup = mutableBundleGraph.createBundleGroup(dependency, target);
|
|
let bundle = mutableBundleGraph.createBundle({
|
|
entryAsset: nullthrows(mutableBundleGraph.getResolvedAsset(dependency)),
|
|
target,
|
|
});
|
|
|
|
mutableBundleGraph.addBundleToBundleGroup(bundle, bundleGroup);
|
|
mutableBundleGraph.addBundleToBundleGroup(bundle, bundleGroup);
|
|
});
|
|
});
|
|
|
|
const stats = {size: 0, time: 0};
|
|
function createMockAssetGraph() {
|
|
let graph = new AssetGraph();
|
|
graph.setRootConnections({
|
|
entries: [toProjectPath('/', '/index'), toProjectPath('/', '/index2')],
|
|
});
|
|
|
|
graph.resolveEntry(
|
|
toProjectPath('/', '/index'),
|
|
[
|
|
{
|
|
filePath: toProjectPath('/', '/path/to/index/src/main.js'),
|
|
packagePath: toProjectPath('/', '/path/to/index'),
|
|
},
|
|
],
|
|
'1',
|
|
);
|
|
graph.resolveEntry(
|
|
toProjectPath('/', '/index2'),
|
|
[
|
|
{
|
|
filePath: toProjectPath('/', '/path/to/index/src/main2.js'),
|
|
packagePath: toProjectPath('/', '/path/to/index'),
|
|
},
|
|
],
|
|
'2',
|
|
);
|
|
graph.resolveTargets(
|
|
{
|
|
filePath: toProjectPath('/', '/path/to/index/src/main.js'),
|
|
packagePath: toProjectPath('/', '/path/to/index'),
|
|
},
|
|
DEFAULT_TARGETS,
|
|
'3',
|
|
);
|
|
graph.resolveTargets(
|
|
{
|
|
filePath: toProjectPath('/', '/path/to/index/src/main2.js'),
|
|
packagePath: toProjectPath('/', '/path/to/index'),
|
|
},
|
|
DEFAULT_TARGETS,
|
|
'4',
|
|
);
|
|
|
|
let dep1 = createDependency({
|
|
specifier: 'path/to/index/src/main.js',
|
|
specifierType: 'esm',
|
|
needsStableName: true,
|
|
env: DEFAULT_ENV,
|
|
target: DEFAULT_TARGETS[0],
|
|
});
|
|
let dep2 = createDependency({
|
|
specifier: 'path/to/index/src/main2.js',
|
|
specifierType: 'esm',
|
|
needsStableName: true,
|
|
env: DEFAULT_ENV,
|
|
target: DEFAULT_TARGETS[0],
|
|
});
|
|
|
|
let filePath = toProjectPath('/', '/index.js');
|
|
let req1 = {filePath, env: DEFAULT_ENV};
|
|
graph.resolveDependency(dep1, nodeFromAssetGroup(req1).value, '5');
|
|
graph.resolveAssetGroup(
|
|
req1,
|
|
[
|
|
createAsset({
|
|
id: id1,
|
|
filePath,
|
|
type: 'js',
|
|
isSource: true,
|
|
hash: '#1',
|
|
stats,
|
|
env: DEFAULT_ENV,
|
|
}),
|
|
],
|
|
'6',
|
|
);
|
|
|
|
filePath = toProjectPath('/', '/index2.js');
|
|
let req2 = {filePath, env: DEFAULT_ENV};
|
|
graph.resolveDependency(dep2, nodeFromAssetGroup(req2).value, '7');
|
|
graph.resolveAssetGroup(
|
|
req2,
|
|
[
|
|
createAsset({
|
|
id: id2,
|
|
filePath,
|
|
type: 'js',
|
|
isSource: true,
|
|
hash: '#2',
|
|
stats,
|
|
env: DEFAULT_ENV,
|
|
}),
|
|
],
|
|
'8',
|
|
);
|
|
|
|
return graph;
|
|
}
|
|
|