@git.zone/cli 2.13.11 → 2.13.12
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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/mod_format/formatters/templates.formatter.d.ts +4 -0
- package/dist_ts/mod_format/formatters/templates.formatter.js +50 -34
- package/dist_ts/mod_format/mod.plugins.d.ts +2 -1
- package/dist_ts/mod_format/mod.plugins.js +3 -2
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_format/formatters/templates.formatter.ts +55 -34
- package/ts/mod_format/mod.plugins.ts +2 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '2.13.
|
|
6
|
+
version: '2.13.12',
|
|
7
7
|
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
|
|
@@ -2,6 +2,10 @@ import { BaseFormatter } from '../classes.baseformatter.js';
|
|
|
2
2
|
import type { IPlannedChange } from '../interfaces.format.js';
|
|
3
3
|
export declare class TemplatesFormatter extends BaseFormatter {
|
|
4
4
|
get name(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Render a template directory through smartscaf and return a map of path → content.
|
|
7
|
+
*/
|
|
8
|
+
private renderTemplate;
|
|
5
9
|
analyze(): Promise<IPlannedChange[]>;
|
|
6
10
|
private analyzeTemplate;
|
|
7
11
|
applyChange(change: IPlannedChange): Promise<void>;
|
|
@@ -6,6 +6,27 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
6
6
|
get name() {
|
|
7
7
|
return 'templates';
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Render a template directory through smartscaf and return a map of path → content.
|
|
11
|
+
*/
|
|
12
|
+
async renderTemplate(templateName) {
|
|
13
|
+
const templateDir = plugins.path.join(paths.templatesDir, templateName);
|
|
14
|
+
const scafTemplate = new plugins.smartscaf.ScafTemplate(templateDir);
|
|
15
|
+
await scafTemplate.readTemplateFromDir();
|
|
16
|
+
const gitzoneData = this.project.gitzoneConfig?.data;
|
|
17
|
+
if (gitzoneData) {
|
|
18
|
+
await scafTemplate.supplyVariables({
|
|
19
|
+
module: gitzoneData.module,
|
|
20
|
+
projectType: gitzoneData.projectType,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const renderedFiles = await scafTemplate.renderToMemory();
|
|
24
|
+
const fileMap = new Map();
|
|
25
|
+
for (const file of renderedFiles) {
|
|
26
|
+
fileMap.set(file.path, file.contents.toString());
|
|
27
|
+
}
|
|
28
|
+
return fileMap;
|
|
29
|
+
}
|
|
9
30
|
async analyze() {
|
|
10
31
|
const changes = [];
|
|
11
32
|
const project = this.project;
|
|
@@ -20,7 +41,8 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
20
41
|
switch (projectType) {
|
|
21
42
|
case 'npm':
|
|
22
43
|
case 'wcc':
|
|
23
|
-
const accessLevel = project.gitzoneConfig?.data?.
|
|
44
|
+
const accessLevel = project.gitzoneConfig?.data?.release?.accessLevel
|
|
45
|
+
|| project.gitzoneConfig?.data?.npmciOptions?.npmAccessLevel;
|
|
24
46
|
const ciTemplate = accessLevel === 'public' ? 'ci_default' : 'ci_default_private';
|
|
25
47
|
const ciChanges = await this.analyzeTemplate(ciTemplate, [
|
|
26
48
|
{ templatePath: '.gitea/workflows/default_nottags.yaml', destPath: '.gitea/workflows/default_nottags.yaml' },
|
|
@@ -66,49 +88,43 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
66
88
|
async analyzeTemplate(templateName, files) {
|
|
67
89
|
const changes = [];
|
|
68
90
|
const templateDir = plugins.path.join(paths.templatesDir, templateName);
|
|
69
|
-
// Check if template exists
|
|
70
91
|
const templateExists = await plugins.smartfs.directory(templateDir).exists();
|
|
71
92
|
if (!templateExists) {
|
|
72
93
|
logVerbose(`Template ${templateName} not found`);
|
|
73
94
|
return changes;
|
|
74
95
|
}
|
|
96
|
+
let renderedFiles;
|
|
97
|
+
try {
|
|
98
|
+
renderedFiles = await this.renderTemplate(templateName);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logVerbose(`Failed to render template ${templateName}: ${error.message}`);
|
|
102
|
+
return changes;
|
|
103
|
+
}
|
|
75
104
|
for (const file of files) {
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
logVerbose(`Template file ${templateFilePath} not found`);
|
|
105
|
+
// Look up by templatePath first, then destPath (frontmatter may rename files)
|
|
106
|
+
const processedContent = renderedFiles.get(file.templatePath)
|
|
107
|
+
|| renderedFiles.get(file.destPath);
|
|
108
|
+
if (!processedContent) {
|
|
109
|
+
logVerbose(`Template file ${file.templatePath} not found in rendered output`);
|
|
82
110
|
continue;
|
|
83
111
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
112
|
+
const destExists = await plugins.smartfs.file(file.destPath).exists();
|
|
113
|
+
let currentContent = '';
|
|
114
|
+
if (destExists) {
|
|
115
|
+
currentContent = (await plugins.smartfs
|
|
116
|
+
.file(file.destPath)
|
|
88
117
|
.encoding('utf8')
|
|
89
118
|
.read());
|
|
90
|
-
// Check if destination file exists
|
|
91
|
-
const destExists = await plugins.smartfs.file(destFilePath).exists();
|
|
92
|
-
let currentContent = '';
|
|
93
|
-
if (destExists) {
|
|
94
|
-
currentContent = (await plugins.smartfs
|
|
95
|
-
.file(destFilePath)
|
|
96
|
-
.encoding('utf8')
|
|
97
|
-
.read());
|
|
98
|
-
}
|
|
99
|
-
// Only add change if content differs
|
|
100
|
-
if (templateContent !== currentContent) {
|
|
101
|
-
changes.push({
|
|
102
|
-
type: destExists ? 'modify' : 'create',
|
|
103
|
-
path: destFilePath,
|
|
104
|
-
module: this.name,
|
|
105
|
-
description: `Apply template ${templateName}/${file.templatePath}`,
|
|
106
|
-
content: templateContent,
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
119
|
}
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
if (processedContent !== currentContent) {
|
|
121
|
+
changes.push({
|
|
122
|
+
type: destExists ? 'modify' : 'create',
|
|
123
|
+
path: file.destPath,
|
|
124
|
+
module: this.name,
|
|
125
|
+
description: `Apply template ${templateName}/${file.templatePath}`,
|
|
126
|
+
content: processedContent,
|
|
127
|
+
});
|
|
112
128
|
}
|
|
113
129
|
}
|
|
114
130
|
return changes;
|
|
@@ -125,4 +141,4 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
125
141
|
logger.log('info', `Applied template to ${change.path}`);
|
|
126
142
|
}
|
|
127
143
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21vZF9mb3JtYXQvZm9ybWF0dGVycy90ZW1wbGF0ZXMuZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBYTtJQUNuRCxJQUFJLElBQUk7UUFDTixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQW9CO1FBQy9DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFeEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRSxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztRQUNyRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDakMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUMxQixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7YUFDckMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFD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
|
|
@@ -7,4 +7,5 @@ import * as smartobject from '@push.rocks/smartobject';
|
|
|
7
7
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
8
8
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
9
9
|
import * as smartdiff from '@push.rocks/smartdiff';
|
|
10
|
-
|
|
10
|
+
import * as smartscaf from '@push.rocks/smartscaf';
|
|
11
|
+
export { path, smartfile, smartinteract, smartlegal, smartobject, smartnpm, smartconfig, smartdiff, smartscaf, };
|
|
@@ -7,5 +7,6 @@ import * as smartobject from '@push.rocks/smartobject';
|
|
|
7
7
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
8
8
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
9
9
|
import * as smartdiff from '@push.rocks/smartdiff';
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
import * as smartscaf from '@push.rocks/smartscaf';
|
|
11
|
+
export { path, smartfile, smartinteract, smartlegal, smartobject, smartnpm, smartconfig, smartdiff, smartscaf, };
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZm9ybWF0L21vZC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBRTlCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQ0wsSUFBSSxFQUNKLFNBQVMsRUFDVCxhQUFhLEVBQ2IsVUFBVSxFQUNWLFdBQVcsRUFDWCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEdBQ1YsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/cli",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "2.13.
|
|
4
|
+
"version": "2.13.12",
|
|
5
5
|
"description": "A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.",
|
|
6
6
|
"main": "dist_ts/index.ts",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@push.rocks/smartopen": "^2.0.0",
|
|
87
87
|
"@push.rocks/smartpath": "^6.0.0",
|
|
88
88
|
"@push.rocks/smartpromise": "^4.2.3",
|
|
89
|
-
"@push.rocks/smartscaf": "^4.0.
|
|
89
|
+
"@push.rocks/smartscaf": "^4.0.21",
|
|
90
90
|
"@push.rocks/smartshell": "^3.3.7",
|
|
91
91
|
"@push.rocks/smartunique": "^3.0.9",
|
|
92
92
|
"@push.rocks/smartupdate": "^2.0.6",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/cli',
|
|
6
|
-
version: '2.13.
|
|
6
|
+
version: '2.13.12',
|
|
7
7
|
description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.'
|
|
8
8
|
}
|
|
@@ -9,6 +9,32 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
9
9
|
return 'templates';
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Render a template directory through smartscaf and return a map of path → content.
|
|
14
|
+
*/
|
|
15
|
+
private async renderTemplate(templateName: string): Promise<Map<string, string>> {
|
|
16
|
+
const templateDir = plugins.path.join(paths.templatesDir, templateName);
|
|
17
|
+
|
|
18
|
+
const scafTemplate = new plugins.smartscaf.ScafTemplate(templateDir);
|
|
19
|
+
await scafTemplate.readTemplateFromDir();
|
|
20
|
+
|
|
21
|
+
const gitzoneData = this.project.gitzoneConfig?.data;
|
|
22
|
+
if (gitzoneData) {
|
|
23
|
+
await scafTemplate.supplyVariables({
|
|
24
|
+
module: gitzoneData.module,
|
|
25
|
+
projectType: gitzoneData.projectType,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const renderedFiles = await scafTemplate.renderToMemory();
|
|
30
|
+
|
|
31
|
+
const fileMap = new Map<string, string>();
|
|
32
|
+
for (const file of renderedFiles) {
|
|
33
|
+
fileMap.set(file.path, file.contents.toString());
|
|
34
|
+
}
|
|
35
|
+
return fileMap;
|
|
36
|
+
}
|
|
37
|
+
|
|
12
38
|
async analyze(): Promise<IPlannedChange[]> {
|
|
13
39
|
const changes: IPlannedChange[] = [];
|
|
14
40
|
const project = this.project;
|
|
@@ -25,7 +51,8 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
25
51
|
switch (projectType) {
|
|
26
52
|
case 'npm':
|
|
27
53
|
case 'wcc':
|
|
28
|
-
const accessLevel = project.gitzoneConfig?.data?.
|
|
54
|
+
const accessLevel = (project.gitzoneConfig?.data as any)?.release?.accessLevel
|
|
55
|
+
|| project.gitzoneConfig?.data?.npmciOptions?.npmAccessLevel;
|
|
29
56
|
const ciTemplate = accessLevel === 'public' ? 'ci_default' : 'ci_default_private';
|
|
30
57
|
const ciChanges = await this.analyzeTemplate(ciTemplate, [
|
|
31
58
|
{ templatePath: '.gitea/workflows/default_nottags.yaml', destPath: '.gitea/workflows/default_nottags.yaml' },
|
|
@@ -80,53 +107,47 @@ export class TemplatesFormatter extends BaseFormatter {
|
|
|
80
107
|
const changes: IPlannedChange[] = [];
|
|
81
108
|
const templateDir = plugins.path.join(paths.templatesDir, templateName);
|
|
82
109
|
|
|
83
|
-
// Check if template exists
|
|
84
110
|
const templateExists = await plugins.smartfs.directory(templateDir).exists();
|
|
85
111
|
if (!templateExists) {
|
|
86
112
|
logVerbose(`Template ${templateName} not found`);
|
|
87
113
|
return changes;
|
|
88
114
|
}
|
|
89
115
|
|
|
116
|
+
let renderedFiles: Map<string, string>;
|
|
117
|
+
try {
|
|
118
|
+
renderedFiles = await this.renderTemplate(templateName);
|
|
119
|
+
} catch (error) {
|
|
120
|
+
logVerbose(`Failed to render template ${templateName}: ${error.message}`);
|
|
121
|
+
return changes;
|
|
122
|
+
}
|
|
123
|
+
|
|
90
124
|
for (const file of files) {
|
|
91
|
-
|
|
92
|
-
const
|
|
125
|
+
// Look up by templatePath first, then destPath (frontmatter may rename files)
|
|
126
|
+
const processedContent = renderedFiles.get(file.templatePath)
|
|
127
|
+
|| renderedFiles.get(file.destPath);
|
|
93
128
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (!fileExists) {
|
|
97
|
-
logVerbose(`Template file ${templateFilePath} not found`);
|
|
129
|
+
if (!processedContent) {
|
|
130
|
+
logVerbose(`Template file ${file.templatePath} not found in rendered output`);
|
|
98
131
|
continue;
|
|
99
132
|
}
|
|
100
133
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
134
|
+
const destExists = await plugins.smartfs.file(file.destPath).exists();
|
|
135
|
+
let currentContent = '';
|
|
136
|
+
if (destExists) {
|
|
137
|
+
currentContent = (await plugins.smartfs
|
|
138
|
+
.file(file.destPath)
|
|
105
139
|
.encoding('utf8')
|
|
106
140
|
.read()) as string;
|
|
141
|
+
}
|
|
107
142
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Only add change if content differs
|
|
119
|
-
if (templateContent !== currentContent) {
|
|
120
|
-
changes.push({
|
|
121
|
-
type: destExists ? 'modify' : 'create',
|
|
122
|
-
path: destFilePath,
|
|
123
|
-
module: this.name,
|
|
124
|
-
description: `Apply template ${templateName}/${file.templatePath}`,
|
|
125
|
-
content: templateContent,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
} catch (error) {
|
|
129
|
-
logVerbose(`Failed to read template ${templateFilePath}: ${error.message}`);
|
|
143
|
+
if (processedContent !== currentContent) {
|
|
144
|
+
changes.push({
|
|
145
|
+
type: destExists ? 'modify' : 'create',
|
|
146
|
+
path: file.destPath,
|
|
147
|
+
module: this.name,
|
|
148
|
+
description: `Apply template ${templateName}/${file.templatePath}`,
|
|
149
|
+
content: processedContent,
|
|
150
|
+
});
|
|
130
151
|
}
|
|
131
152
|
}
|
|
132
153
|
|
|
@@ -8,6 +8,7 @@ import * as smartobject from '@push.rocks/smartobject';
|
|
|
8
8
|
import * as smartnpm from '@push.rocks/smartnpm';
|
|
9
9
|
import * as smartconfig from '@push.rocks/smartconfig';
|
|
10
10
|
import * as smartdiff from '@push.rocks/smartdiff';
|
|
11
|
+
import * as smartscaf from '@push.rocks/smartscaf';
|
|
11
12
|
|
|
12
13
|
export {
|
|
13
14
|
path,
|
|
@@ -18,4 +19,5 @@ export {
|
|
|
18
19
|
smartnpm,
|
|
19
20
|
smartconfig,
|
|
20
21
|
smartdiff,
|
|
22
|
+
smartscaf,
|
|
21
23
|
};
|