@wrongstack/plugins 0.264.0 → 0.267.0
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/auto-doc.js +4 -31
- package/dist/git-autocommit.js +4 -4
- package/dist/index.js +13 -39
- package/dist/template-engine.js +5 -4
- package/package.json +2 -2
package/dist/auto-doc.js
CHANGED
|
@@ -50,32 +50,7 @@ function parseSource(content) {
|
|
|
50
50
|
}
|
|
51
51
|
return entities;
|
|
52
52
|
}
|
|
53
|
-
function
|
|
54
|
-
switch (entity.kind) {
|
|
55
|
-
case "function": {
|
|
56
|
-
const params = entity.params.map((p) => ` * @param ${p} - TODO: describe parameter`).join("\n");
|
|
57
|
-
const returns = entity.returnType ? `
|
|
58
|
-
* @returns ${includeTypes ? `{${entity.returnType}} ` : ""}TODO: describe return value` : "";
|
|
59
|
-
return `/**
|
|
60
|
-
* TODO: One-line description of ${entity.name}
|
|
61
|
-
${params}${returns}
|
|
62
|
-
*/`;
|
|
63
|
-
}
|
|
64
|
-
case "class":
|
|
65
|
-
return `/**
|
|
66
|
-
* TODO: Describe class ${entity.name}
|
|
67
|
-
*/`;
|
|
68
|
-
case "type":
|
|
69
|
-
return `/**
|
|
70
|
-
* TODO: Describe type ${entity.name}
|
|
71
|
-
*/`;
|
|
72
|
-
case "interface":
|
|
73
|
-
return `/**
|
|
74
|
-
* TODO: Describe interface ${entity.name}
|
|
75
|
-
*/`;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
function generateTSDoc(entity, includeTypes) {
|
|
53
|
+
function generateDocComment(entity, includeTypes) {
|
|
79
54
|
switch (entity.kind) {
|
|
80
55
|
case "function": {
|
|
81
56
|
const params = entity.params.map((p) => ` * @param ${p} - TODO: describe parameter`).join("\n");
|
|
@@ -112,7 +87,7 @@ function injectDocComment(content, entity, doc) {
|
|
|
112
87
|
const idx = entity.startLine - 1;
|
|
113
88
|
const codeLine = lines[idx] ?? "";
|
|
114
89
|
const indent = codeLine.match(/^(\s*)/)?.[1] ?? "";
|
|
115
|
-
lines.splice(idx, 0, `${indent}${doc}
|
|
90
|
+
lines.splice(idx, 0, `${indent}${doc}`);
|
|
116
91
|
return lines.join("\n");
|
|
117
92
|
}
|
|
118
93
|
async function runAutoDoc(input, api) {
|
|
@@ -122,7 +97,6 @@ async function runAutoDoc(input, api) {
|
|
|
122
97
|
if (input.files.length === 0) {
|
|
123
98
|
return { ok: false, error: "input.files is empty \u2014 provide at least one file path", filesProcessed: 0, changes: [] };
|
|
124
99
|
}
|
|
125
|
-
const style = input.style ?? "tsdoc";
|
|
126
100
|
const includeTypes = api.config.extensions?.["auto-doc"]?.["includeTypes"] ?? false;
|
|
127
101
|
const results = [];
|
|
128
102
|
for (const file of input.files) {
|
|
@@ -139,7 +113,7 @@ async function runAutoDoc(input, api) {
|
|
|
139
113
|
let modified = content;
|
|
140
114
|
for (const entity of entities) {
|
|
141
115
|
if (!input.force && !needsDocComment(modified, entity)) continue;
|
|
142
|
-
const doc =
|
|
116
|
+
const doc = generateDocComment(entity, includeTypes);
|
|
143
117
|
modified = injectDocComment(modified, entity, doc);
|
|
144
118
|
results.push({ file, entity: entity.name });
|
|
145
119
|
}
|
|
@@ -160,7 +134,6 @@ async function runAutoDocPreview(input, api) {
|
|
|
160
134
|
if (input.files.length === 0) {
|
|
161
135
|
return { ok: false, error: "input.files is empty \u2014 provide at least one file path", previews: [] };
|
|
162
136
|
}
|
|
163
|
-
const style = input.style ?? "tsdoc";
|
|
164
137
|
const includeTypes = api.config.extensions?.["auto-doc"]?.["includeTypes"] ?? false;
|
|
165
138
|
const previews = [];
|
|
166
139
|
for (const file of input.files) {
|
|
@@ -168,7 +141,7 @@ async function runAutoDocPreview(input, api) {
|
|
|
168
141
|
const { readFileSync } = await import('fs');
|
|
169
142
|
const content = readFileSync(file, "utf-8");
|
|
170
143
|
const entities = parseSource(content);
|
|
171
|
-
const generated = entities.filter((e) =>
|
|
144
|
+
const generated = entities.filter((e) => needsDocComment(content, e)).map((e) => generateDocComment(e, includeTypes));
|
|
172
145
|
previews.push({ file, entities: generated });
|
|
173
146
|
} catch {
|
|
174
147
|
api.log.warn(`auto-doc-preview: could not read file ${file}`);
|
package/dist/git-autocommit.js
CHANGED
|
@@ -136,11 +136,11 @@ var plugin = {
|
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
138
|
setup(api) {
|
|
139
|
-
const
|
|
139
|
+
const extConfig = api.config.extensions?.["git-autocommit"];
|
|
140
140
|
const opts = {
|
|
141
|
-
conventionalCommits:
|
|
142
|
-
autoStage:
|
|
143
|
-
defaultType:
|
|
141
|
+
conventionalCommits: extConfig?.["conventionalCommits"] ?? true,
|
|
142
|
+
autoStage: extConfig?.["autoStage"] ?? false,
|
|
143
|
+
defaultType: extConfig?.["defaultType"] ?? "feat"
|
|
144
144
|
};
|
|
145
145
|
api.tools.register({
|
|
146
146
|
name: "git_autocommit",
|
package/dist/index.js
CHANGED
|
@@ -59,32 +59,7 @@ function parseSource(content) {
|
|
|
59
59
|
}
|
|
60
60
|
return entities;
|
|
61
61
|
}
|
|
62
|
-
function
|
|
63
|
-
switch (entity.kind) {
|
|
64
|
-
case "function": {
|
|
65
|
-
const params = entity.params.map((p) => ` * @param ${p} - TODO: describe parameter`).join("\n");
|
|
66
|
-
const returns = entity.returnType ? `
|
|
67
|
-
* @returns ${includeTypes ? `{${entity.returnType}} ` : ""}TODO: describe return value` : "";
|
|
68
|
-
return `/**
|
|
69
|
-
* TODO: One-line description of ${entity.name}
|
|
70
|
-
${params}${returns}
|
|
71
|
-
*/`;
|
|
72
|
-
}
|
|
73
|
-
case "class":
|
|
74
|
-
return `/**
|
|
75
|
-
* TODO: Describe class ${entity.name}
|
|
76
|
-
*/`;
|
|
77
|
-
case "type":
|
|
78
|
-
return `/**
|
|
79
|
-
* TODO: Describe type ${entity.name}
|
|
80
|
-
*/`;
|
|
81
|
-
case "interface":
|
|
82
|
-
return `/**
|
|
83
|
-
* TODO: Describe interface ${entity.name}
|
|
84
|
-
*/`;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function generateTSDoc(entity, includeTypes) {
|
|
62
|
+
function generateDocComment(entity, includeTypes) {
|
|
88
63
|
switch (entity.kind) {
|
|
89
64
|
case "function": {
|
|
90
65
|
const params = entity.params.map((p) => ` * @param ${p} - TODO: describe parameter`).join("\n");
|
|
@@ -121,7 +96,7 @@ function injectDocComment(content, entity, doc) {
|
|
|
121
96
|
const idx = entity.startLine - 1;
|
|
122
97
|
const codeLine = lines[idx] ?? "";
|
|
123
98
|
const indent = codeLine.match(/^(\s*)/)?.[1] ?? "";
|
|
124
|
-
lines.splice(idx, 0, `${indent}${doc}
|
|
99
|
+
lines.splice(idx, 0, `${indent}${doc}`);
|
|
125
100
|
return lines.join("\n");
|
|
126
101
|
}
|
|
127
102
|
async function runAutoDoc(input, api) {
|
|
@@ -131,7 +106,6 @@ async function runAutoDoc(input, api) {
|
|
|
131
106
|
if (input.files.length === 0) {
|
|
132
107
|
return { ok: false, error: "input.files is empty \u2014 provide at least one file path", filesProcessed: 0, changes: [] };
|
|
133
108
|
}
|
|
134
|
-
const style = input.style ?? "tsdoc";
|
|
135
109
|
const includeTypes = api.config.extensions?.["auto-doc"]?.["includeTypes"] ?? false;
|
|
136
110
|
const results = [];
|
|
137
111
|
for (const file of input.files) {
|
|
@@ -148,7 +122,7 @@ async function runAutoDoc(input, api) {
|
|
|
148
122
|
let modified = content;
|
|
149
123
|
for (const entity of entities) {
|
|
150
124
|
if (!input.force && !needsDocComment(modified, entity)) continue;
|
|
151
|
-
const doc =
|
|
125
|
+
const doc = generateDocComment(entity, includeTypes);
|
|
152
126
|
modified = injectDocComment(modified, entity, doc);
|
|
153
127
|
results.push({ file, entity: entity.name });
|
|
154
128
|
}
|
|
@@ -169,7 +143,6 @@ async function runAutoDocPreview(input, api) {
|
|
|
169
143
|
if (input.files.length === 0) {
|
|
170
144
|
return { ok: false, error: "input.files is empty \u2014 provide at least one file path", previews: [] };
|
|
171
145
|
}
|
|
172
|
-
const style = input.style ?? "tsdoc";
|
|
173
146
|
const includeTypes = api.config.extensions?.["auto-doc"]?.["includeTypes"] ?? false;
|
|
174
147
|
const previews = [];
|
|
175
148
|
for (const file of input.files) {
|
|
@@ -177,7 +150,7 @@ async function runAutoDocPreview(input, api) {
|
|
|
177
150
|
const { readFileSync: readFileSync2 } = await import('fs');
|
|
178
151
|
const content = readFileSync2(file, "utf-8");
|
|
179
152
|
const entities = parseSource(content);
|
|
180
|
-
const generated = entities.filter((e) =>
|
|
153
|
+
const generated = entities.filter((e) => needsDocComment(content, e)).map((e) => generateDocComment(e, includeTypes));
|
|
181
154
|
previews.push({ file, entities: generated });
|
|
182
155
|
} catch {
|
|
183
156
|
api.log.warn(`auto-doc-preview: could not read file ${file}`);
|
|
@@ -378,11 +351,11 @@ var plugin2 = {
|
|
|
378
351
|
}
|
|
379
352
|
},
|
|
380
353
|
setup(api) {
|
|
381
|
-
const
|
|
354
|
+
const extConfig = api.config.extensions?.["git-autocommit"];
|
|
382
355
|
const opts = {
|
|
383
|
-
conventionalCommits:
|
|
384
|
-
autoStage:
|
|
385
|
-
defaultType:
|
|
356
|
+
conventionalCommits: extConfig?.["conventionalCommits"] ?? true,
|
|
357
|
+
autoStage: extConfig?.["autoStage"] ?? false,
|
|
358
|
+
defaultType: extConfig?.["defaultType"] ?? "feat"
|
|
386
359
|
};
|
|
387
360
|
api.tools.register({
|
|
388
361
|
name: "git_autocommit",
|
|
@@ -2157,12 +2130,12 @@ function expandLoops(template, variables) {
|
|
|
2157
2130
|
}
|
|
2158
2131
|
);
|
|
2159
2132
|
}
|
|
2160
|
-
function renderTemplate(template, variables) {
|
|
2133
|
+
function renderTemplate(template, variables, escapeHtml = true) {
|
|
2161
2134
|
let result = template;
|
|
2162
2135
|
result = expandConditionals(result, variables);
|
|
2163
2136
|
result = expandLoops(result, variables);
|
|
2164
2137
|
result = expandTemplate(result, variables);
|
|
2165
|
-
{
|
|
2138
|
+
if (escapeHtml) {
|
|
2166
2139
|
result = result.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
2167
2140
|
}
|
|
2168
2141
|
return result;
|
|
@@ -2195,6 +2168,7 @@ var plugin9 = {
|
|
|
2195
2168
|
},
|
|
2196
2169
|
setup(api) {
|
|
2197
2170
|
const templates = /* @__PURE__ */ new Map();
|
|
2171
|
+
const autoEscapeHtml = api.config.extensions?.["template-engine"]?.["autoEscapeHtml"] ?? true;
|
|
2198
2172
|
api.tools.register({
|
|
2199
2173
|
name: "template_expand",
|
|
2200
2174
|
description: "Expand a template string with variable substitution. Supports {{variable}}, {{#if var}}...{{/if}} conditionals, and {{#each items}}...{{/each}} loops.",
|
|
@@ -2227,7 +2201,7 @@ var plugin9 = {
|
|
|
2227
2201
|
}
|
|
2228
2202
|
let result;
|
|
2229
2203
|
try {
|
|
2230
|
-
result = raw ? renderTemplateRaw(template, variables) : renderTemplate(template, variables);
|
|
2204
|
+
result = raw ? renderTemplateRaw(template, variables) : renderTemplate(template, variables, autoEscapeHtml);
|
|
2231
2205
|
} catch (err) {
|
|
2232
2206
|
return { ok: false, error: String(err) };
|
|
2233
2207
|
}
|
|
@@ -2291,7 +2265,7 @@ var plugin9 = {
|
|
|
2291
2265
|
}
|
|
2292
2266
|
let result;
|
|
2293
2267
|
try {
|
|
2294
|
-
result = raw ? renderTemplateRaw(content, variables) : renderTemplate(content, variables);
|
|
2268
|
+
result = raw ? renderTemplateRaw(content, variables) : renderTemplate(content, variables, autoEscapeHtml);
|
|
2295
2269
|
} catch (err) {
|
|
2296
2270
|
return { ok: false, error: `Template rendering failed: ${err}` };
|
|
2297
2271
|
}
|
package/dist/template-engine.js
CHANGED
|
@@ -34,12 +34,12 @@ function expandLoops(template, variables) {
|
|
|
34
34
|
}
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
|
-
function renderTemplate(template, variables) {
|
|
37
|
+
function renderTemplate(template, variables, escapeHtml = true) {
|
|
38
38
|
let result = template;
|
|
39
39
|
result = expandConditionals(result, variables);
|
|
40
40
|
result = expandLoops(result, variables);
|
|
41
41
|
result = expandTemplate(result, variables);
|
|
42
|
-
{
|
|
42
|
+
if (escapeHtml) {
|
|
43
43
|
result = result.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
44
44
|
}
|
|
45
45
|
return result;
|
|
@@ -72,6 +72,7 @@ var plugin = {
|
|
|
72
72
|
},
|
|
73
73
|
setup(api) {
|
|
74
74
|
const templates = /* @__PURE__ */ new Map();
|
|
75
|
+
const autoEscapeHtml = api.config.extensions?.["template-engine"]?.["autoEscapeHtml"] ?? true;
|
|
75
76
|
api.tools.register({
|
|
76
77
|
name: "template_expand",
|
|
77
78
|
description: "Expand a template string with variable substitution. Supports {{variable}}, {{#if var}}...{{/if}} conditionals, and {{#each items}}...{{/each}} loops.",
|
|
@@ -104,7 +105,7 @@ var plugin = {
|
|
|
104
105
|
}
|
|
105
106
|
let result;
|
|
106
107
|
try {
|
|
107
|
-
result = raw ? renderTemplateRaw(template, variables) : renderTemplate(template, variables);
|
|
108
|
+
result = raw ? renderTemplateRaw(template, variables) : renderTemplate(template, variables, autoEscapeHtml);
|
|
108
109
|
} catch (err) {
|
|
109
110
|
return { ok: false, error: String(err) };
|
|
110
111
|
}
|
|
@@ -168,7 +169,7 @@ var plugin = {
|
|
|
168
169
|
}
|
|
169
170
|
let result;
|
|
170
171
|
try {
|
|
171
|
-
result = raw ? renderTemplateRaw(content, variables) : renderTemplate(content, variables);
|
|
172
|
+
result = raw ? renderTemplateRaw(content, variables) : renderTemplate(content, variables, autoEscapeHtml);
|
|
172
173
|
} catch (err) {
|
|
173
174
|
return { ok: false, error: `Template rendering failed: ${err}` };
|
|
174
175
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/plugins",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.267.0",
|
|
4
4
|
"description": "Official WrongStack plugin collection — auto-doc, git-autocommit, shell-check, cost-tracker, file-watcher, web-search, json-path, cron, template-engine, semver-bump",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ECOSTACK TECHNOLOGY OÜ",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"vitest": "^4.1.8"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@wrongstack/core": "0.
|
|
66
|
+
"@wrongstack/core": "0.267.0"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "tsup",
|