@git.zone/cli 2.13.8 → 2.13.11
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.
- package/assets/templates/gitignore/_gitignore +4 -0
- package/assets/templates/{npmextra/npmextra.json → smartconfig/_smartconfig.json} +3 -0
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.gitzoneconfig.js +4 -4
- package/dist_ts/gitzone.cli.js +1 -15
- package/dist_ts/mod_commit/index.js +4 -4
- package/dist_ts/mod_config/classes.commitconfig.d.ts +3 -3
- package/dist_ts/mod_config/classes.commitconfig.js +20 -20
- package/dist_ts/mod_config/classes.releaseconfig.d.ts +3 -3
- package/dist_ts/mod_config/classes.releaseconfig.js +21 -21
- package/dist_ts/mod_config/index.js +12 -12
- package/dist_ts/mod_format/classes.baseformatter.d.ts +2 -9
- package/dist_ts/mod_format/classes.baseformatter.js +13 -26
- package/dist_ts/mod_format/classes.formatplanner.d.ts +1 -3
- package/dist_ts/mod_format/classes.formatplanner.js +11 -39
- package/dist_ts/mod_format/classes.formatstats.d.ts +0 -5
- package/dist_ts/mod_format/classes.formatstats.js +3 -35
- package/dist_ts/mod_format/formatters/cleanup.formatter.js +1 -2
- package/dist_ts/mod_format/formatters/copy.formatter.js +5 -8
- package/dist_ts/mod_format/formatters/gitignore.formatter.d.ts +5 -0
- package/dist_ts/mod_format/formatters/gitignore.formatter.js +23 -29
- package/dist_ts/mod_format/formatters/packagejson.formatter.js +5 -5
- package/dist_ts/mod_format/formatters/prettier.formatter.js +4 -12
- package/dist_ts/mod_format/formatters/{npmextra.formatter.d.ts → smartconfig.formatter.d.ts} +6 -1
- package/dist_ts/mod_format/formatters/smartconfig.formatter.js +180 -0
- package/dist_ts/mod_format/formatters/templates.formatter.js +1 -10
- package/dist_ts/mod_format/formatters/tsconfig.formatter.js +6 -4
- package/dist_ts/mod_format/index.d.ts +0 -4
- package/dist_ts/mod_format/index.js +27 -78
- package/dist_ts/mod_format/interfaces.format.d.ts +1 -18
- package/dist_ts/mod_format/interfaces.format.js +16 -2
- package/dist_ts/mod_format/mod.plugins.d.ts +2 -7
- package/dist_ts/mod_format/mod.plugins.js +3 -8
- package/dist_ts/mod_services/classes.globalregistry.js +2 -2
- package/dist_ts/mod_services/classes.servicemanager.d.ts +2 -2
- package/dist_ts/mod_services/classes.servicemanager.js +21 -21
- package/dist_ts/plugins.d.ts +2 -2
- package/dist_ts/plugins.js +3 -3
- package/package.json +11 -17
- package/readme.md +231 -218
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.gitzoneconfig.ts +3 -3
- package/ts/gitzone.cli.ts +0 -17
- package/ts/mod_commit/index.ts +3 -3
- package/ts/mod_config/classes.commitconfig.ts +19 -19
- package/ts/mod_config/classes.releaseconfig.ts +20 -20
- package/ts/mod_config/index.ts +11 -11
- package/ts/mod_format/classes.baseformatter.ts +14 -25
- package/ts/mod_format/classes.formatplanner.ts +10 -39
- package/ts/mod_format/classes.formatstats.ts +2 -42
- package/ts/mod_format/formatters/cleanup.formatter.ts +0 -1
- package/ts/mod_format/formatters/copy.formatter.ts +4 -8
- package/ts/mod_format/formatters/gitignore.formatter.ts +25 -29
- package/ts/mod_format/formatters/packagejson.formatter.ts +4 -4
- package/ts/mod_format/formatters/prettier.formatter.ts +3 -13
- package/ts/mod_format/formatters/smartconfig.formatter.ts +213 -0
- package/ts/mod_format/formatters/templates.formatter.ts +0 -9
- package/ts/mod_format/formatters/tsconfig.formatter.ts +6 -3
- package/ts/mod_format/index.ts +35 -98
- package/ts/mod_format/interfaces.format.ts +16 -19
- package/ts/mod_format/mod.plugins.ts +2 -12
- package/ts/mod_services/classes.globalregistry.ts +2 -2
- package/ts/mod_services/classes.servicemanager.ts +20 -20
- package/ts/plugins.ts +2 -2
- package/dist_ts/mod_format/classes.changecache.d.ts +0 -26
- package/dist_ts/mod_format/classes.changecache.js +0 -181
- package/dist_ts/mod_format/classes.dependency-analyzer.d.ts +0 -13
- package/dist_ts/mod_format/classes.dependency-analyzer.js +0 -93
- package/dist_ts/mod_format/classes.rollbackmanager.d.ts +0 -22
- package/dist_ts/mod_format/classes.rollbackmanager.js +0 -259
- package/dist_ts/mod_format/format.cleanup.d.ts +0 -2
- package/dist_ts/mod_format/format.cleanup.js +0 -25
- package/dist_ts/mod_format/format.copy.d.ts +0 -24
- package/dist_ts/mod_format/format.copy.js +0 -77
- package/dist_ts/mod_format/format.gitignore.d.ts +0 -2
- package/dist_ts/mod_format/format.gitignore.js +0 -48
- package/dist_ts/mod_format/format.license.d.ts +0 -2
- package/dist_ts/mod_format/format.license.js +0 -26
- package/dist_ts/mod_format/format.npmextra.d.ts +0 -5
- package/dist_ts/mod_format/format.npmextra.js +0 -125
- package/dist_ts/mod_format/format.packagejson.d.ts +0 -2
- package/dist_ts/mod_format/format.packagejson.js +0 -145
- package/dist_ts/mod_format/format.prettier.d.ts +0 -2
- package/dist_ts/mod_format/format.prettier.js +0 -56
- package/dist_ts/mod_format/format.readme.d.ts +0 -1
- package/dist_ts/mod_format/format.readme.js +0 -29
- package/dist_ts/mod_format/format.templates.d.ts +0 -5
- package/dist_ts/mod_format/format.templates.js +0 -68
- package/dist_ts/mod_format/format.tsconfig.d.ts +0 -2
- package/dist_ts/mod_format/format.tsconfig.js +0 -28
- package/dist_ts/mod_format/formatters/npmextra.formatter.js +0 -142
- package/ts/mod_format/classes.changecache.ts +0 -235
- package/ts/mod_format/classes.dependency-analyzer.ts +0 -117
- package/ts/mod_format/classes.rollbackmanager.ts +0 -340
- package/ts/mod_format/format.cleanup.ts +0 -26
- package/ts/mod_format/format.copy.ts +0 -93
- package/ts/mod_format/format.gitignore.ts +0 -54
- package/ts/mod_format/format.license.ts +0 -32
- package/ts/mod_format/format.npmextra.ts +0 -151
- package/ts/mod_format/format.packagejson.ts +0 -196
- package/ts/mod_format/format.prettier.ts +0 -66
- package/ts/mod_format/format.readme.ts +0 -29
- package/ts/mod_format/format.templates.ts +0 -79
- package/ts/mod_format/format.tsconfig.ts +0 -31
- package/ts/mod_format/formatters/npmextra.formatter.ts +0 -174
- /package/{npmextra.json → .smartconfig.json} +0 -0
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
import { logger } from '../gitzone.logging.js';
|
|
4
|
-
import { Project } from '../classes.project.js';
|
|
5
|
-
/**
|
|
6
|
-
* takes care of updating files from templates
|
|
7
|
-
*/
|
|
8
|
-
export const run = async (project) => {
|
|
9
|
-
const templateModule = await import('../mod_template/index.js');
|
|
10
|
-
// update vscode
|
|
11
|
-
const vscodeTemplate = await templateModule.getTemplate('vscode');
|
|
12
|
-
await vscodeTemplate.writeToDisk(paths.cwd);
|
|
13
|
-
logger.log('info', `Updated vscode template!`);
|
|
14
|
-
// update gitlab ci and Dockerfile
|
|
15
|
-
switch (project.gitzoneConfig.data.projectType) {
|
|
16
|
-
case 'npm':
|
|
17
|
-
case 'wcc':
|
|
18
|
-
if (project.gitzoneConfig.data.npmciOptions.npmAccessLevel === 'public') {
|
|
19
|
-
const ciTemplateDefault = await templateModule.getTemplate('ci_default');
|
|
20
|
-
ciTemplateDefault.writeToDisk(paths.cwd);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
const ciTemplateDefault = await templateModule.getTemplate('ci_default_private');
|
|
24
|
-
ciTemplateDefault.writeToDisk(paths.cwd);
|
|
25
|
-
}
|
|
26
|
-
logger.log('info', 'Updated .gitlabci.yml!');
|
|
27
|
-
break;
|
|
28
|
-
case 'service':
|
|
29
|
-
case 'website':
|
|
30
|
-
const ciTemplateDocker = await templateModule.getTemplate('ci_docker');
|
|
31
|
-
await ciTemplateDocker.writeToDisk(paths.cwd);
|
|
32
|
-
logger.log('info', 'Updated CI/CD config files!');
|
|
33
|
-
// lets care about docker
|
|
34
|
-
const dockerTemplate = await templateModule.getTemplate('dockerfile_service');
|
|
35
|
-
dockerTemplate.writeToDisk(paths.cwd);
|
|
36
|
-
logger.log('info', 'Updated Dockerfile!');
|
|
37
|
-
// lets care about cli
|
|
38
|
-
const cliTemplate = await templateModule.getTemplate('cli');
|
|
39
|
-
await cliTemplate.writeToDisk(paths.cwd);
|
|
40
|
-
logger.log('info', 'Updated cli.ts.js and cli.js!');
|
|
41
|
-
break;
|
|
42
|
-
default:
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
// update html
|
|
46
|
-
if (project.gitzoneConfig.data.projectType === 'website') {
|
|
47
|
-
const websiteUpdateTemplate = await templateModule.getTemplate('website_update');
|
|
48
|
-
const variables = {
|
|
49
|
-
assetbrokerUrl: project.gitzoneConfig.data.module.assetbrokerUrl,
|
|
50
|
-
legalUrl: project.gitzoneConfig.data.module.legalUrl,
|
|
51
|
-
};
|
|
52
|
-
console.log('updating website template with variables\n', JSON.stringify(variables, null, 2));
|
|
53
|
-
websiteUpdateTemplate.supplyVariables(variables);
|
|
54
|
-
await websiteUpdateTemplate.writeToDisk(paths.cwd);
|
|
55
|
-
logger.log('info', `Updated html for website!`);
|
|
56
|
-
}
|
|
57
|
-
else if (project.gitzoneConfig.data.projectType === 'service') {
|
|
58
|
-
const websiteUpdateTemplate = await templateModule.getTemplate('service_update');
|
|
59
|
-
await websiteUpdateTemplate.writeToDisk(paths.cwd);
|
|
60
|
-
logger.log('info', `Updated html for element template!`);
|
|
61
|
-
}
|
|
62
|
-
else if (project.gitzoneConfig.data.projectType === 'wcc') {
|
|
63
|
-
const wccUpdateTemplate = await templateModule.getTemplate('wcc_update');
|
|
64
|
-
await wccUpdateTemplate.writeToDisk(paths.cwd);
|
|
65
|
-
logger.log('info', `Updated html for wcc template!`);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LnRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9mb3JtYXQvZm9ybWF0LnRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUM1QyxNQUFNLGNBQWMsR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBRWhFLGdCQUFnQjtJQUNoQixNQUFNLGNBQWMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEUsTUFBTSxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBRS9DLGtDQUFrQztJQUNsQyxRQUFRLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLO1lBQ1IsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLGlCQUFpQixHQUNyQixNQUFNLGNBQWMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2pELGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFD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
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
import { logger } from '../gitzone.logging.js';
|
|
4
|
-
import { Project } from '../classes.project.js';
|
|
5
|
-
export const run = async (projectArg) => {
|
|
6
|
-
// lets care about tsconfig.json
|
|
7
|
-
logger.log('info', 'Formatting tsconfig.json...');
|
|
8
|
-
const factory = plugins.smartfile.SmartFileFactory.nodeFs();
|
|
9
|
-
const tsconfigSmartfile = await factory.fromFilePath(plugins.path.join(paths.cwd, 'tsconfig.json'));
|
|
10
|
-
const tsconfigObject = JSON.parse(tsconfigSmartfile.parseContentAsString());
|
|
11
|
-
tsconfigObject.compilerOptions = tsconfigObject.compilerOptions || {};
|
|
12
|
-
tsconfigObject.compilerOptions.baseUrl = '.';
|
|
13
|
-
tsconfigObject.compilerOptions.paths = {};
|
|
14
|
-
const tsPublishMod = await import('@git.zone/tspublish');
|
|
15
|
-
const tsPublishInstance = new tsPublishMod.TsPublish();
|
|
16
|
-
const publishModules = await tsPublishInstance.getModuleSubDirs(paths.cwd);
|
|
17
|
-
for (const publishModule of Object.keys(publishModules)) {
|
|
18
|
-
const publishConfig = publishModules[publishModule];
|
|
19
|
-
tsconfigObject.compilerOptions.paths[`${publishConfig.name}`] = [
|
|
20
|
-
`./${publishModule}/index.js`,
|
|
21
|
-
];
|
|
22
|
-
}
|
|
23
|
-
await tsconfigSmartfile.editContentAsString(async () => {
|
|
24
|
-
return JSON.stringify(tsconfigObject, null, 2);
|
|
25
|
-
});
|
|
26
|
-
await tsconfigSmartfile.write();
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LnRzY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2Zvcm1hdC9mb3JtYXQudHNjb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssS0FBSyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsVUFBbUIsRUFBRSxFQUFFO0lBQy9DLGdDQUFnQztJQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQzlDLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUM1RSxjQUFjLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO0lBQ3RFLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUM3QyxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6RCxNQUFNLGlCQUFpQixHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZELE1BQU0sY0FBYyxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLEtBQUssTUFBTSxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHO1lBQzlELEtBQUssYUFBYSxXQUFXO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEMsQ0FBQyxDQUFDIn0=
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { BaseFormatter } from '../classes.baseformatter.js';
|
|
2
|
-
import * as plugins from '../mod.plugins.js';
|
|
3
|
-
import { logger, logVerbose } from '../../gitzone.logging.js';
|
|
4
|
-
/**
|
|
5
|
-
* Migrates npmextra.json from old namespace keys to new package-scoped keys
|
|
6
|
-
*/
|
|
7
|
-
const migrateNamespaceKeys = (npmextraJson) => {
|
|
8
|
-
let migrated = false;
|
|
9
|
-
const migrations = [
|
|
10
|
-
{ oldKey: 'gitzone', newKey: '@git.zone/cli' },
|
|
11
|
-
{ oldKey: 'tsdoc', newKey: '@git.zone/tsdoc' },
|
|
12
|
-
{ oldKey: 'npmdocker', newKey: '@git.zone/tsdocker' },
|
|
13
|
-
{ oldKey: 'npmci', newKey: '@ship.zone/szci' },
|
|
14
|
-
{ oldKey: 'szci', newKey: '@ship.zone/szci' },
|
|
15
|
-
];
|
|
16
|
-
for (const { oldKey, newKey } of migrations) {
|
|
17
|
-
if (npmextraJson[oldKey]) {
|
|
18
|
-
if (!npmextraJson[newKey]) {
|
|
19
|
-
// New key doesn't exist - simple rename
|
|
20
|
-
npmextraJson[newKey] = npmextraJson[oldKey];
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
// New key exists - merge old into new (old values don't overwrite new)
|
|
24
|
-
npmextraJson[newKey] = {
|
|
25
|
-
...npmextraJson[oldKey],
|
|
26
|
-
...npmextraJson[newKey],
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
delete npmextraJson[oldKey];
|
|
30
|
-
migrated = true;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return migrated;
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Migrates npmAccessLevel from @ship.zone/szci to @git.zone/cli.release.accessLevel
|
|
37
|
-
*/
|
|
38
|
-
const migrateAccessLevel = (npmextraJson) => {
|
|
39
|
-
const szciConfig = npmextraJson['@ship.zone/szci'];
|
|
40
|
-
if (!szciConfig?.npmAccessLevel) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
const gitzoneConfig = npmextraJson['@git.zone/cli'] || {};
|
|
44
|
-
if (gitzoneConfig?.release?.accessLevel) {
|
|
45
|
-
delete szciConfig.npmAccessLevel;
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
if (!npmextraJson['@git.zone/cli']) {
|
|
49
|
-
npmextraJson['@git.zone/cli'] = {};
|
|
50
|
-
}
|
|
51
|
-
if (!npmextraJson['@git.zone/cli'].release) {
|
|
52
|
-
npmextraJson['@git.zone/cli'].release = {};
|
|
53
|
-
}
|
|
54
|
-
npmextraJson['@git.zone/cli'].release.accessLevel = szciConfig.npmAccessLevel;
|
|
55
|
-
delete szciConfig.npmAccessLevel;
|
|
56
|
-
return true;
|
|
57
|
-
};
|
|
58
|
-
export class NpmextraFormatter extends BaseFormatter {
|
|
59
|
-
get name() {
|
|
60
|
-
return 'npmextra';
|
|
61
|
-
}
|
|
62
|
-
async analyze() {
|
|
63
|
-
const changes = [];
|
|
64
|
-
const npmextraPath = 'npmextra.json';
|
|
65
|
-
// Check if file exists
|
|
66
|
-
const exists = await plugins.smartfs.file(npmextraPath).exists();
|
|
67
|
-
if (!exists) {
|
|
68
|
-
logVerbose('npmextra.json does not exist, skipping');
|
|
69
|
-
return changes;
|
|
70
|
-
}
|
|
71
|
-
// Read current content
|
|
72
|
-
const currentContent = (await plugins.smartfs
|
|
73
|
-
.file(npmextraPath)
|
|
74
|
-
.encoding('utf8')
|
|
75
|
-
.read());
|
|
76
|
-
// Parse and compute new content
|
|
77
|
-
const npmextraJson = JSON.parse(currentContent);
|
|
78
|
-
// Apply migrations (these are automatic, non-interactive)
|
|
79
|
-
migrateNamespaceKeys(npmextraJson);
|
|
80
|
-
migrateAccessLevel(npmextraJson);
|
|
81
|
-
// Ensure namespaces exist
|
|
82
|
-
if (!npmextraJson['@git.zone/cli']) {
|
|
83
|
-
npmextraJson['@git.zone/cli'] = {};
|
|
84
|
-
}
|
|
85
|
-
if (!npmextraJson['@ship.zone/szci']) {
|
|
86
|
-
npmextraJson['@ship.zone/szci'] = {};
|
|
87
|
-
}
|
|
88
|
-
const newContent = JSON.stringify(npmextraJson, null, 2);
|
|
89
|
-
// Only add change if content differs
|
|
90
|
-
if (newContent !== currentContent) {
|
|
91
|
-
changes.push({
|
|
92
|
-
type: 'modify',
|
|
93
|
-
path: npmextraPath,
|
|
94
|
-
module: this.name,
|
|
95
|
-
description: 'Migrate and format npmextra.json',
|
|
96
|
-
content: newContent,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return changes;
|
|
100
|
-
}
|
|
101
|
-
async applyChange(change) {
|
|
102
|
-
if (change.type !== 'modify' || !change.content)
|
|
103
|
-
return;
|
|
104
|
-
// Parse the content to check for missing required fields
|
|
105
|
-
const npmextraJson = JSON.parse(change.content);
|
|
106
|
-
// Check for missing required module information
|
|
107
|
-
const expectedRepoInformation = [
|
|
108
|
-
'projectType',
|
|
109
|
-
'module.githost',
|
|
110
|
-
'module.gitscope',
|
|
111
|
-
'module.gitrepo',
|
|
112
|
-
'module.description',
|
|
113
|
-
'module.npmPackagename',
|
|
114
|
-
'module.license',
|
|
115
|
-
];
|
|
116
|
-
const interactInstance = new plugins.smartinteract.SmartInteract();
|
|
117
|
-
for (const expectedRepoInformationItem of expectedRepoInformation) {
|
|
118
|
-
if (!plugins.smartobject.smartGet(npmextraJson['@git.zone/cli'], expectedRepoInformationItem)) {
|
|
119
|
-
interactInstance.addQuestions([
|
|
120
|
-
{
|
|
121
|
-
message: `What is the value of ${expectedRepoInformationItem}`,
|
|
122
|
-
name: expectedRepoInformationItem,
|
|
123
|
-
type: 'input',
|
|
124
|
-
default: 'undefined variable',
|
|
125
|
-
},
|
|
126
|
-
]);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const answerbucket = await interactInstance.runQueue();
|
|
130
|
-
for (const expectedRepoInformationItem of expectedRepoInformation) {
|
|
131
|
-
const cliProvidedValue = answerbucket.getAnswerFor(expectedRepoInformationItem);
|
|
132
|
-
if (cliProvidedValue) {
|
|
133
|
-
plugins.smartobject.smartAdd(npmextraJson['@git.zone/cli'], expectedRepoInformationItem, cliProvidedValue);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// Write the final content
|
|
137
|
-
const finalContent = JSON.stringify(npmextraJson, null, 2);
|
|
138
|
-
await this.modifyFile(change.path, finalContent);
|
|
139
|
-
logger.log('info', 'Updated npmextra.json');
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtZXh0cmEuZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvbW9kX2Zvcm1hdC9mb3JtYXR0ZXJzL25wbWV4dHJhLmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFNUQsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQWlCLEVBQVcsRUFBRTtJQUMxRCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7UUFDOUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtRQUM5QyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFO1FBQ3JELEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUU7UUFDOUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtLQUM5QyxDQUFDO0lBQ0YsS0FBSyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMxQix3Q0FBd0M7Z0JBQ3hDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsQ0FBQztpQkFB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
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import * as paths from '../paths.js';
|
|
3
|
-
|
|
4
|
-
export interface IFileCache {
|
|
5
|
-
path: string;
|
|
6
|
-
checksum: string;
|
|
7
|
-
modified: number;
|
|
8
|
-
size: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface ICacheManifest {
|
|
12
|
-
version: string;
|
|
13
|
-
lastFormat: number;
|
|
14
|
-
files: IFileCache[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class ChangeCache {
|
|
18
|
-
private cacheDir: string;
|
|
19
|
-
private manifestPath: string;
|
|
20
|
-
private cacheVersion = '1.0.0';
|
|
21
|
-
|
|
22
|
-
constructor() {
|
|
23
|
-
this.cacheDir = plugins.path.join(paths.cwd, '.nogit', 'gitzone-cache');
|
|
24
|
-
this.manifestPath = plugins.path.join(this.cacheDir, 'manifest.json');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async initialize(): Promise<void> {
|
|
28
|
-
await plugins.smartfs.directory(this.cacheDir).recursive().create();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async getManifest(): Promise<ICacheManifest> {
|
|
32
|
-
const defaultManifest: ICacheManifest = {
|
|
33
|
-
version: this.cacheVersion,
|
|
34
|
-
lastFormat: 0,
|
|
35
|
-
files: [],
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const exists = await plugins.smartfs.file(this.manifestPath).exists();
|
|
39
|
-
if (!exists) {
|
|
40
|
-
return defaultManifest;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const content = (await plugins.smartfs
|
|
45
|
-
.file(this.manifestPath)
|
|
46
|
-
.encoding('utf8')
|
|
47
|
-
.read()) as string;
|
|
48
|
-
const manifest = JSON.parse(content);
|
|
49
|
-
|
|
50
|
-
// Validate the manifest structure
|
|
51
|
-
if (this.isValidManifest(manifest)) {
|
|
52
|
-
return manifest;
|
|
53
|
-
} else {
|
|
54
|
-
console.warn('Invalid manifest structure, returning default manifest');
|
|
55
|
-
return defaultManifest;
|
|
56
|
-
}
|
|
57
|
-
} catch (error) {
|
|
58
|
-
console.warn(
|
|
59
|
-
`Failed to read cache manifest: ${error.message}, returning default manifest`,
|
|
60
|
-
);
|
|
61
|
-
// Try to delete the corrupted file
|
|
62
|
-
try {
|
|
63
|
-
await plugins.smartfs.file(this.manifestPath).delete();
|
|
64
|
-
} catch (removeError) {
|
|
65
|
-
// Ignore removal errors
|
|
66
|
-
}
|
|
67
|
-
return defaultManifest;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async saveManifest(manifest: ICacheManifest): Promise<void> {
|
|
72
|
-
// Validate before saving
|
|
73
|
-
if (!this.isValidManifest(manifest)) {
|
|
74
|
-
throw new Error('Invalid manifest structure, cannot save');
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Ensure directory exists
|
|
78
|
-
await plugins.smartfs.directory(this.cacheDir).recursive().create();
|
|
79
|
-
|
|
80
|
-
// Write directly with proper JSON stringification
|
|
81
|
-
const jsonContent = JSON.stringify(manifest, null, 2);
|
|
82
|
-
await plugins.smartfs
|
|
83
|
-
.file(this.manifestPath)
|
|
84
|
-
.encoding('utf8')
|
|
85
|
-
.write(jsonContent);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async hasFileChanged(filePath: string): Promise<boolean> {
|
|
89
|
-
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
90
|
-
? filePath
|
|
91
|
-
: plugins.path.join(paths.cwd, filePath);
|
|
92
|
-
|
|
93
|
-
// Check if file exists
|
|
94
|
-
const exists = await plugins.smartfs.file(absolutePath).exists();
|
|
95
|
-
if (!exists) {
|
|
96
|
-
return true; // File doesn't exist, so it's "changed" (will be created)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Get current file stats
|
|
100
|
-
const stats = await plugins.smartfs.file(absolutePath).stat();
|
|
101
|
-
|
|
102
|
-
// Skip directories
|
|
103
|
-
if (stats.isDirectory) {
|
|
104
|
-
return false; // Directories are not processed
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const content = (await plugins.smartfs
|
|
108
|
-
.file(absolutePath)
|
|
109
|
-
.encoding('utf8')
|
|
110
|
-
.read()) as string;
|
|
111
|
-
const currentChecksum = this.calculateChecksum(content);
|
|
112
|
-
|
|
113
|
-
// Get cached info
|
|
114
|
-
const manifest = await this.getManifest();
|
|
115
|
-
const cachedFile = manifest.files.find((f) => f.path === filePath);
|
|
116
|
-
|
|
117
|
-
if (!cachedFile) {
|
|
118
|
-
return true; // Not in cache, so it's changed
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Compare checksums
|
|
122
|
-
return (
|
|
123
|
-
cachedFile.checksum !== currentChecksum ||
|
|
124
|
-
cachedFile.size !== stats.size ||
|
|
125
|
-
cachedFile.modified !== stats.mtime.getTime()
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
async updateFileCache(filePath: string): Promise<void> {
|
|
130
|
-
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
131
|
-
? filePath
|
|
132
|
-
: plugins.path.join(paths.cwd, filePath);
|
|
133
|
-
|
|
134
|
-
// Get current file stats
|
|
135
|
-
const stats = await plugins.smartfs.file(absolutePath).stat();
|
|
136
|
-
|
|
137
|
-
// Skip directories
|
|
138
|
-
if (stats.isDirectory) {
|
|
139
|
-
return; // Don't cache directories
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const content = (await plugins.smartfs
|
|
143
|
-
.file(absolutePath)
|
|
144
|
-
.encoding('utf8')
|
|
145
|
-
.read()) as string;
|
|
146
|
-
const checksum = this.calculateChecksum(content);
|
|
147
|
-
|
|
148
|
-
// Update manifest
|
|
149
|
-
const manifest = await this.getManifest();
|
|
150
|
-
const existingIndex = manifest.files.findIndex((f) => f.path === filePath);
|
|
151
|
-
|
|
152
|
-
const cacheEntry: IFileCache = {
|
|
153
|
-
path: filePath,
|
|
154
|
-
checksum,
|
|
155
|
-
modified: stats.mtime.getTime(),
|
|
156
|
-
size: stats.size,
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
if (existingIndex !== -1) {
|
|
160
|
-
manifest.files[existingIndex] = cacheEntry;
|
|
161
|
-
} else {
|
|
162
|
-
manifest.files.push(cacheEntry);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
manifest.lastFormat = Date.now();
|
|
166
|
-
await this.saveManifest(manifest);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
async getChangedFiles(filePaths: string[]): Promise<string[]> {
|
|
170
|
-
const changedFiles: string[] = [];
|
|
171
|
-
|
|
172
|
-
for (const filePath of filePaths) {
|
|
173
|
-
if (await this.hasFileChanged(filePath)) {
|
|
174
|
-
changedFiles.push(filePath);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return changedFiles;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async clean(): Promise<void> {
|
|
182
|
-
const manifest = await this.getManifest();
|
|
183
|
-
const validFiles: IFileCache[] = [];
|
|
184
|
-
|
|
185
|
-
// Remove entries for files that no longer exist
|
|
186
|
-
for (const file of manifest.files) {
|
|
187
|
-
const absolutePath = plugins.path.isAbsolute(file.path)
|
|
188
|
-
? file.path
|
|
189
|
-
: plugins.path.join(paths.cwd, file.path);
|
|
190
|
-
|
|
191
|
-
if (await plugins.smartfs.file(absolutePath).exists()) {
|
|
192
|
-
validFiles.push(file);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
manifest.files = validFiles;
|
|
197
|
-
await this.saveManifest(manifest);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
private calculateChecksum(content: string | Buffer): string {
|
|
201
|
-
return plugins.crypto.createHash('sha256').update(content).digest('hex');
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
private isValidManifest(manifest: any): manifest is ICacheManifest {
|
|
205
|
-
// Check if manifest has the required structure
|
|
206
|
-
if (!manifest || typeof manifest !== 'object') {
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Check required fields
|
|
211
|
-
if (
|
|
212
|
-
typeof manifest.version !== 'string' ||
|
|
213
|
-
typeof manifest.lastFormat !== 'number' ||
|
|
214
|
-
!Array.isArray(manifest.files)
|
|
215
|
-
) {
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// Check each file entry
|
|
220
|
-
for (const file of manifest.files) {
|
|
221
|
-
if (
|
|
222
|
-
!file ||
|
|
223
|
-
typeof file !== 'object' ||
|
|
224
|
-
typeof file.path !== 'string' ||
|
|
225
|
-
typeof file.checksum !== 'string' ||
|
|
226
|
-
typeof file.modified !== 'number' ||
|
|
227
|
-
typeof file.size !== 'number'
|
|
228
|
-
) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
return true;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import * as plugins from './mod.plugins.js';
|
|
2
|
-
import { BaseFormatter } from './classes.baseformatter.js';
|
|
3
|
-
|
|
4
|
-
export interface IModuleDependency {
|
|
5
|
-
module: string;
|
|
6
|
-
dependencies: Set<string>;
|
|
7
|
-
dependents: Set<string>;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export class DependencyAnalyzer {
|
|
11
|
-
private moduleDependencies: Map<string, IModuleDependency> = new Map();
|
|
12
|
-
|
|
13
|
-
constructor() {
|
|
14
|
-
this.initializeDependencies();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
private initializeDependencies(): void {
|
|
18
|
-
// Define dependencies between format modules
|
|
19
|
-
const dependencies = {
|
|
20
|
-
cleanup: [], // No dependencies
|
|
21
|
-
npmextra: [], // No dependencies
|
|
22
|
-
license: ['npmextra'], // Depends on npmextra for config
|
|
23
|
-
packagejson: ['npmextra'], // Depends on npmextra for config
|
|
24
|
-
templates: ['npmextra', 'packagejson'], // Depends on both
|
|
25
|
-
gitignore: ['templates'], // Depends on templates
|
|
26
|
-
tsconfig: ['packagejson'], // Depends on package.json
|
|
27
|
-
prettier: [
|
|
28
|
-
'cleanup',
|
|
29
|
-
'npmextra',
|
|
30
|
-
'packagejson',
|
|
31
|
-
'templates',
|
|
32
|
-
'gitignore',
|
|
33
|
-
'tsconfig',
|
|
34
|
-
], // Runs after most others
|
|
35
|
-
readme: ['npmextra', 'packagejson'], // Depends on project metadata
|
|
36
|
-
copy: ['npmextra'], // Depends on config
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// Initialize all modules
|
|
40
|
-
for (const [module, deps] of Object.entries(dependencies)) {
|
|
41
|
-
this.moduleDependencies.set(module, {
|
|
42
|
-
module,
|
|
43
|
-
dependencies: new Set(deps),
|
|
44
|
-
dependents: new Set(),
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Build reverse dependencies (dependents)
|
|
49
|
-
for (const [module, deps] of Object.entries(dependencies)) {
|
|
50
|
-
for (const dep of deps) {
|
|
51
|
-
const depModule = this.moduleDependencies.get(dep);
|
|
52
|
-
if (depModule) {
|
|
53
|
-
depModule.dependents.add(module);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
getExecutionGroups(modules: BaseFormatter[]): BaseFormatter[][] {
|
|
60
|
-
const modulesMap = new Map(modules.map((m) => [m.name, m]));
|
|
61
|
-
const executed = new Set<string>();
|
|
62
|
-
const groups: BaseFormatter[][] = [];
|
|
63
|
-
|
|
64
|
-
while (executed.size < modules.length) {
|
|
65
|
-
const currentGroup: BaseFormatter[] = [];
|
|
66
|
-
|
|
67
|
-
for (const module of modules) {
|
|
68
|
-
if (executed.has(module.name)) continue;
|
|
69
|
-
|
|
70
|
-
const dependency = this.moduleDependencies.get(module.name);
|
|
71
|
-
if (!dependency) {
|
|
72
|
-
// Unknown module, execute in isolation
|
|
73
|
-
currentGroup.push(module);
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Check if all dependencies have been executed
|
|
78
|
-
const allDepsExecuted = Array.from(dependency.dependencies).every(
|
|
79
|
-
(dep) => executed.has(dep) || !modulesMap.has(dep),
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
if (allDepsExecuted) {
|
|
83
|
-
currentGroup.push(module);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (currentGroup.length === 0) {
|
|
88
|
-
// Circular dependency or error - execute remaining modules
|
|
89
|
-
for (const module of modules) {
|
|
90
|
-
if (!executed.has(module.name)) {
|
|
91
|
-
currentGroup.push(module);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
currentGroup.forEach((m) => executed.add(m.name));
|
|
97
|
-
groups.push(currentGroup);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return groups;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
canRunInParallel(module1: string, module2: string): boolean {
|
|
104
|
-
const dep1 = this.moduleDependencies.get(module1);
|
|
105
|
-
const dep2 = this.moduleDependencies.get(module2);
|
|
106
|
-
|
|
107
|
-
if (!dep1 || !dep2) return false;
|
|
108
|
-
|
|
109
|
-
// Check if module1 depends on module2 or vice versa
|
|
110
|
-
return (
|
|
111
|
-
!dep1.dependencies.has(module2) &&
|
|
112
|
-
!dep2.dependencies.has(module1) &&
|
|
113
|
-
!dep1.dependents.has(module2) &&
|
|
114
|
-
!dep2.dependents.has(module1)
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
}
|