Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function generateDepFileTextFromDeps(
dependencies: depGraph.Dependency[],
googBaseDir: string
): string {
// `getDepFileText()` doesn't generate addDependency() for SCRIPT,
// so change the type to CLOSURE_PROVIDE temporally.
// TODO: fix upstream google-closure-deps and remove this
const scriptDeps = dependencies.filter(dep => dep.type === depGraph.DependencyType.SCRIPT);
scriptDeps.forEach(dep => {
dep.type = depGraph.DependencyType.CLOSURE_PROVIDE;
});
const depFileText = depFile.getDepFileText(googBaseDir, dependencies);
// restore the type
scriptDeps.forEach(dep => {
dep.type = depGraph.DependencyType.SCRIPT;
});
return depFileText;
}
it("outputs SCRIPT type dep", async () => {
const dep = new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
"/app/foo.js",
[],
[new depGraph.GoogRequire("goog.array")]
);
const text = await generateDepFileTextFromDeps([dep], "/closure/goog");
assert.equal(text, "goog.addDependency('../../app/foo.js', [], ['goog.array'], {});\n");
assert.equal(dep.type, depGraph.DependencyType.SCRIPT, "dep.type should not be changed");
});
it("does not output imported `goog`", async () => {
function createScriptDependency(filepath: string): any {
return new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
path.join(fixturesDir, filepath),
[],
[]
);
}
it("loads all js files in paths", async () => {
it("loads deps of closure-library from the deps.js", async () => {
const closureLib1 = path.resolve(fixturesBaseDir, "closure-lib1");
const deps = await getClosureLibraryDependencies(closureLib1);
deps.sort((a, b) => a.path.localeCompare(b.path));
assertDependenciesEqual(deps, [
new depGraph.Dependency(
depGraph.DependencyType.CLOSURE_PROVIDE,
`${closureLib1}/closure/goog/a11y/aria/aria.js`,
["goog.a11y.aria"],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.a11y.aria.Role")]
),
new depGraph.Dependency(
depGraph.DependencyType.CLOSURE_MODULE,
`${closureLib1}/closure/goog/collections/sets.js`,
["goog.collections.sets"],
[new depGraph.GoogRequire("goog")],
"es6"
),
]);
});
});
it("does not output imported `goog`", async () => {
const dep = new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
"/app/foo.js",
[],
[new depGraph.GoogRequire("goog")]
);
const result = await generateDepFileTextFromDeps([dep], "/closure/goog");
assert.equal(result, "goog.addDependency('../../app/foo.js', [], [], {});\n");
});
});
),
new depGraph.Dependency(
depGraph.DependencyType.ES6_MODULE,
`${variousModulesFixturesDir}/esm-moduleid.js`,
["esm"],
[new depGraph.Es6Import("./foo.js"), new depGraph.GoogRequire("goog")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.ES6_MODULE,
`${variousModulesFixturesDir}/esm.js`,
[],
[new depGraph.Es6Import("./foo.js")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
`${variousModulesFixturesDir}/script.js`,
[],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.array")]
),
] as const;
describe("gendeps", () => {
beforeEach(() => {
clearDepCache();
});
describe("generateDepFileText()", () => {
it("returns correct relative path", async () => {
const inputsRoot = path.join(fixturesBaseDir, "generateDepFileText");
const closureDir = path.join(inputsRoot, "closure");
const entryConfig = {
it("loads deps of closure-library from the deps.js", async () => {
const closureLib1 = path.resolve(fixturesBaseDir, "closure-lib1");
const deps = await getClosureLibraryDependencies(closureLib1);
deps.sort((a, b) => a.path.localeCompare(b.path));
assertDependenciesEqual(deps, [
new depGraph.Dependency(
depGraph.DependencyType.CLOSURE_PROVIDE,
`${closureLib1}/closure/goog/a11y/aria/aria.js`,
["goog.a11y.aria"],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.a11y.aria.Role")]
),
new depGraph.Dependency(
depGraph.DependencyType.CLOSURE_MODULE,
`${closureLib1}/closure/goog/collections/sets.js`,
["goog.collections.sets"],
[new depGraph.GoogRequire("goog")],
"es6"
),
]);
});
});
it("outputs SCRIPT type dep", async () => {
const dep = new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
"/app/foo.js",
[],
[new depGraph.GoogRequire("goog.array")]
);
const text = await generateDepFileTextFromDeps([dep], "/closure/goog");
assert.equal(text, "goog.addDependency('../../app/foo.js', [], ['goog.array'], {});\n");
assert.equal(dep.type, depGraph.DependencyType.SCRIPT, "dep.type should not be changed");
});
it("does not output imported `goog`", async () => {
["esm"],
[new depGraph.Es6Import("./foo.js"), new depGraph.GoogRequire("goog")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.ES6_MODULE,
`${variousModulesFixturesDir}/esm.js`,
[],
[new depGraph.Es6Import("./foo.js")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
`${variousModulesFixturesDir}/script.js`,
[],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.array")]
),
] as const;
describe("DependencyParser()", () => {
it("parses closure provide script", async () => {
const actual = await parseDependency(path.join(variousModulesFixturesDir, "closureprovide.js"));
assertDependencyEquals(actual, expectedVariousModulesDeps[1]);
});
});
describe("DependencyParserWithWorkers()", () => {
let parser: DependencyParserWithWorkers;
beforeEach(() => {
parser = new DependencyParserWithWorkers();
});
afterEach(() => {
),
new depGraph.Dependency(
depGraph.DependencyType.CLOSURE_PROVIDE,
`${variousModulesFixturesDir}/closureprovide.js`,
["closureprovide"],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.array")]
),
new depGraph.Dependency(
depGraph.DependencyType.ES6_MODULE,
`${variousModulesFixturesDir}/esm-moduleid.js`,
["esm"],
[new depGraph.Es6Import("./foo.js"), new depGraph.GoogRequire("goog")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.ES6_MODULE,
`${variousModulesFixturesDir}/esm.js`,
[],
[new depGraph.Es6Import("./foo.js")],
"es6"
),
new depGraph.Dependency(
depGraph.DependencyType.SCRIPT,
`${variousModulesFixturesDir}/script.js`,
[],
[new depGraph.GoogRequire("goog"), new depGraph.GoogRequire("goog.array")]
),
] as const;
describe("DependencyParser()", () => {
it("parses closure provide script", async () => {
const actual = await parseDependency(path.join(variousModulesFixturesDir, "closureprovide.js"));