@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.
Files changed (106) hide show
  1. package/assets/templates/gitignore/_gitignore +4 -0
  2. package/assets/templates/{npmextra/npmextra.json → smartconfig/_smartconfig.json} +3 -0
  3. package/dist_ts/00_commitinfo_data.js +2 -2
  4. package/dist_ts/classes.gitzoneconfig.js +4 -4
  5. package/dist_ts/gitzone.cli.js +1 -15
  6. package/dist_ts/mod_commit/index.js +4 -4
  7. package/dist_ts/mod_config/classes.commitconfig.d.ts +3 -3
  8. package/dist_ts/mod_config/classes.commitconfig.js +20 -20
  9. package/dist_ts/mod_config/classes.releaseconfig.d.ts +3 -3
  10. package/dist_ts/mod_config/classes.releaseconfig.js +21 -21
  11. package/dist_ts/mod_config/index.js +12 -12
  12. package/dist_ts/mod_format/classes.baseformatter.d.ts +2 -9
  13. package/dist_ts/mod_format/classes.baseformatter.js +13 -26
  14. package/dist_ts/mod_format/classes.formatplanner.d.ts +1 -3
  15. package/dist_ts/mod_format/classes.formatplanner.js +11 -39
  16. package/dist_ts/mod_format/classes.formatstats.d.ts +0 -5
  17. package/dist_ts/mod_format/classes.formatstats.js +3 -35
  18. package/dist_ts/mod_format/formatters/cleanup.formatter.js +1 -2
  19. package/dist_ts/mod_format/formatters/copy.formatter.js +5 -8
  20. package/dist_ts/mod_format/formatters/gitignore.formatter.d.ts +5 -0
  21. package/dist_ts/mod_format/formatters/gitignore.formatter.js +23 -29
  22. package/dist_ts/mod_format/formatters/packagejson.formatter.js +5 -5
  23. package/dist_ts/mod_format/formatters/prettier.formatter.js +4 -12
  24. package/dist_ts/mod_format/formatters/{npmextra.formatter.d.ts → smartconfig.formatter.d.ts} +6 -1
  25. package/dist_ts/mod_format/formatters/smartconfig.formatter.js +180 -0
  26. package/dist_ts/mod_format/formatters/templates.formatter.js +1 -10
  27. package/dist_ts/mod_format/formatters/tsconfig.formatter.js +6 -4
  28. package/dist_ts/mod_format/index.d.ts +0 -4
  29. package/dist_ts/mod_format/index.js +27 -78
  30. package/dist_ts/mod_format/interfaces.format.d.ts +1 -18
  31. package/dist_ts/mod_format/interfaces.format.js +16 -2
  32. package/dist_ts/mod_format/mod.plugins.d.ts +2 -7
  33. package/dist_ts/mod_format/mod.plugins.js +3 -8
  34. package/dist_ts/mod_services/classes.globalregistry.js +2 -2
  35. package/dist_ts/mod_services/classes.servicemanager.d.ts +2 -2
  36. package/dist_ts/mod_services/classes.servicemanager.js +21 -21
  37. package/dist_ts/plugins.d.ts +2 -2
  38. package/dist_ts/plugins.js +3 -3
  39. package/package.json +11 -17
  40. package/readme.md +231 -218
  41. package/ts/00_commitinfo_data.ts +1 -1
  42. package/ts/classes.gitzoneconfig.ts +3 -3
  43. package/ts/gitzone.cli.ts +0 -17
  44. package/ts/mod_commit/index.ts +3 -3
  45. package/ts/mod_config/classes.commitconfig.ts +19 -19
  46. package/ts/mod_config/classes.releaseconfig.ts +20 -20
  47. package/ts/mod_config/index.ts +11 -11
  48. package/ts/mod_format/classes.baseformatter.ts +14 -25
  49. package/ts/mod_format/classes.formatplanner.ts +10 -39
  50. package/ts/mod_format/classes.formatstats.ts +2 -42
  51. package/ts/mod_format/formatters/cleanup.formatter.ts +0 -1
  52. package/ts/mod_format/formatters/copy.formatter.ts +4 -8
  53. package/ts/mod_format/formatters/gitignore.formatter.ts +25 -29
  54. package/ts/mod_format/formatters/packagejson.formatter.ts +4 -4
  55. package/ts/mod_format/formatters/prettier.formatter.ts +3 -13
  56. package/ts/mod_format/formatters/smartconfig.formatter.ts +213 -0
  57. package/ts/mod_format/formatters/templates.formatter.ts +0 -9
  58. package/ts/mod_format/formatters/tsconfig.formatter.ts +6 -3
  59. package/ts/mod_format/index.ts +35 -98
  60. package/ts/mod_format/interfaces.format.ts +16 -19
  61. package/ts/mod_format/mod.plugins.ts +2 -12
  62. package/ts/mod_services/classes.globalregistry.ts +2 -2
  63. package/ts/mod_services/classes.servicemanager.ts +20 -20
  64. package/ts/plugins.ts +2 -2
  65. package/dist_ts/mod_format/classes.changecache.d.ts +0 -26
  66. package/dist_ts/mod_format/classes.changecache.js +0 -181
  67. package/dist_ts/mod_format/classes.dependency-analyzer.d.ts +0 -13
  68. package/dist_ts/mod_format/classes.dependency-analyzer.js +0 -93
  69. package/dist_ts/mod_format/classes.rollbackmanager.d.ts +0 -22
  70. package/dist_ts/mod_format/classes.rollbackmanager.js +0 -259
  71. package/dist_ts/mod_format/format.cleanup.d.ts +0 -2
  72. package/dist_ts/mod_format/format.cleanup.js +0 -25
  73. package/dist_ts/mod_format/format.copy.d.ts +0 -24
  74. package/dist_ts/mod_format/format.copy.js +0 -77
  75. package/dist_ts/mod_format/format.gitignore.d.ts +0 -2
  76. package/dist_ts/mod_format/format.gitignore.js +0 -48
  77. package/dist_ts/mod_format/format.license.d.ts +0 -2
  78. package/dist_ts/mod_format/format.license.js +0 -26
  79. package/dist_ts/mod_format/format.npmextra.d.ts +0 -5
  80. package/dist_ts/mod_format/format.npmextra.js +0 -125
  81. package/dist_ts/mod_format/format.packagejson.d.ts +0 -2
  82. package/dist_ts/mod_format/format.packagejson.js +0 -145
  83. package/dist_ts/mod_format/format.prettier.d.ts +0 -2
  84. package/dist_ts/mod_format/format.prettier.js +0 -56
  85. package/dist_ts/mod_format/format.readme.d.ts +0 -1
  86. package/dist_ts/mod_format/format.readme.js +0 -29
  87. package/dist_ts/mod_format/format.templates.d.ts +0 -5
  88. package/dist_ts/mod_format/format.templates.js +0 -68
  89. package/dist_ts/mod_format/format.tsconfig.d.ts +0 -2
  90. package/dist_ts/mod_format/format.tsconfig.js +0 -28
  91. package/dist_ts/mod_format/formatters/npmextra.formatter.js +0 -142
  92. package/ts/mod_format/classes.changecache.ts +0 -235
  93. package/ts/mod_format/classes.dependency-analyzer.ts +0 -117
  94. package/ts/mod_format/classes.rollbackmanager.ts +0 -340
  95. package/ts/mod_format/format.cleanup.ts +0 -26
  96. package/ts/mod_format/format.copy.ts +0 -93
  97. package/ts/mod_format/format.gitignore.ts +0 -54
  98. package/ts/mod_format/format.license.ts +0 -32
  99. package/ts/mod_format/format.npmextra.ts +0 -151
  100. package/ts/mod_format/format.packagejson.ts +0 -196
  101. package/ts/mod_format/format.prettier.ts +0 -66
  102. package/ts/mod_format/format.readme.ts +0 -29
  103. package/ts/mod_format/format.templates.ts +0 -79
  104. package/ts/mod_format/format.tsconfig.ts +0 -31
  105. package/ts/mod_format/formatters/npmextra.formatter.ts +0 -174
  106. /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,2 +0,0 @@
1
- import { Project } from '../classes.project.js';
2
- export declare const run: (projectArg: Project) => Promise<void>;
@@ -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
- }