@zokugun/artifact 0.7.0 → 0.9.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/README.md +22 -2
- package/lib/cli.js +16 -11
- package/lib/commands/add.js +95 -22
- package/lib/commands/index.d.ts +1 -0
- package/lib/commands/index.js +3 -1
- package/lib/commands/list.js +25 -7
- package/lib/commands/outdated.d.ts +1 -0
- package/lib/commands/outdated.js +73 -0
- package/lib/commands/remove.js +39 -18
- package/lib/commands/update.js +36 -21
- package/lib/compositors/codec.d.ts +3 -0
- package/lib/compositors/codec.js +46 -0
- package/lib/compositors/compose.d.ts +1 -0
- package/lib/compositors/compose.js +4 -0
- package/lib/compositors/index.d.ts +1 -0
- package/lib/compositors/index.js +3 -1
- package/lib/compositors/json.js +3 -66
- package/lib/compositors/rc.js +3 -56
- package/lib/compositors/yaml.js +24 -3
- package/lib/configs/install/read-install-config.d.ts +2 -5
- package/lib/configs/install/read-install-config.js +20 -18
- package/lib/configs/install/write-install-config.d.ts +2 -2
- package/lib/configs/install/write-install-config.js +2 -1
- package/lib/configs/package/read-listing-config.d.ts +7 -0
- package/lib/configs/package/read-listing-config.js +71 -0
- package/lib/configs/package/read-package-config.d.ts +2 -1
- package/lib/configs/package/read-package-config.js +96 -10
- package/lib/configs/utils/constants.d.ts +2 -2
- package/lib/configs/utils/constants.js +2 -2
- package/lib/configs/utils/merge-upsert-property.js +0 -8
- package/lib/configs/utils/normalize-file-always.js +5 -0
- package/lib/configs/utils/normalize-file-upsert.d.ts +2 -1
- package/lib/configs/utils/normalize-file-upsert.js +12 -5
- package/lib/journeys/commitlint/index.d.ts +1 -1
- package/lib/journeys/config.ts/index.d.ts +1 -1
- package/lib/journeys/config.ts/index.js +2 -6
- package/lib/journeys/default/index.d.ts +1 -1
- package/lib/journeys/gitignore/index.d.ts +1 -1
- package/lib/journeys/ignore/index.d.ts +1 -1
- package/lib/journeys/index.d.ts +2 -2
- package/lib/journeys/index.js +9 -11
- package/lib/journeys/npmignore/index.d.ts +1 -1
- package/lib/journeys/package/index.d.ts +1 -1
- package/lib/journeys/rc/index.d.ts +1 -1
- package/lib/journeys/tsconfig/index.d.ts +1 -1
- package/lib/parsers/index.d.ts +4 -0
- package/lib/parsers/index.js +41 -0
- package/lib/parsers/json.d.ts +4 -2
- package/lib/parsers/json.js +7 -2
- package/lib/parsers/jsonc/parse.d.ts +2 -5
- package/lib/parsers/jsonc/parse.js +8 -6
- package/lib/parsers/to-format.d.ts +2 -0
- package/lib/parsers/to-format.js +50 -0
- package/lib/parsers/yaml.d.ts +4 -2
- package/lib/parsers/yaml.js +7 -2
- package/lib/routes/command.js +7 -0
- package/lib/routes/index.d.ts +4 -3
- package/lib/routes/index.js +9 -7
- package/lib/routes/{list-sort-concat.d.ts → list-concat-after.d.ts} +1 -1
- package/lib/routes/{list-sort-concat.js → list-concat-after.js} +2 -2
- package/lib/routes/merge-dot-js.d.ts +2 -0
- package/lib/routes/merge-dot-js.js +8 -0
- package/lib/steps/configure-install-file-actions.js +1 -20
- package/lib/steps/configure-update-file-actions.js +1 -20
- package/lib/steps/execute-first-block.js +1 -1
- package/lib/steps/index.d.ts +0 -2
- package/lib/steps/index.js +4 -3
- package/lib/steps/merge-text-files.d.ts +1 -1
- package/lib/steps/merge-text-files.js +6 -2
- package/lib/steps/read-files.d.ts +1 -1
- package/lib/steps/read-files.js +56 -42
- package/lib/steps/read-incoming-config.js +1 -1
- package/lib/steps/remove-files.d.ts +1 -1
- package/lib/steps/remove-files.js +3 -2
- package/lib/steps/rename-files.d.ts +1 -1
- package/lib/steps/rename-files.js +3 -2
- package/lib/steps/validate-newer-package.d.ts +1 -1
- package/lib/steps/validate-newer-package.js +13 -2
- package/lib/types/config.d.ts +11 -7
- package/lib/types/context.d.ts +23 -3
- package/lib/types/context.js +6 -0
- package/lib/types/travel.d.ts +1 -0
- package/lib/utils/build-journey-plan.d.ts +2 -2
- package/lib/utils/build-route.d.ts +1 -1
- package/lib/utils/build-route.js +50 -19
- package/lib/utils/build-travel-plan.js +1 -0
- package/lib/utils/command/merge-and-chains.js +1 -1
- package/lib/utils/command/merge-command-records.js +1 -1
- package/lib/utils/command/merge-parts-by-prefix.js +12 -1
- package/lib/utils/command/merge-semicolon-segments.js +161 -4
- package/lib/utils/fnmatch.d.ts +1 -0
- package/lib/utils/fnmatch.js +11 -0
- package/lib/utils/format-table.d.ts +1 -0
- package/lib/utils/format-table.js +58 -0
- package/lib/utils/get-format.js +2 -9
- package/lib/utils/load-package.d.ts +6 -0
- package/lib/utils/load-package.js +26 -0
- package/lib/utils/template.js +1 -3
- package/lib/utils/time-difference.d.ts +1 -0
- package/lib/utils/time-difference.js +28 -0
- package/package.json +128 -125
- package/lib/journeys/fixpack/index.d.ts +0 -2
- package/lib/journeys/fixpack/index.js +0 -16
- package/lib/steps/validate-not-present-package.d.ts +0 -3
- package/lib/steps/validate-not-present-package.js +0 -24
- package/lib/utils/try-json.d.ts +0 -1
- package/lib/utils/try-json.js +0 -11
|
@@ -11,7 +11,13 @@ const split_segments_js_1 = require("./split-segments.js");
|
|
|
11
11
|
function mergeSemicolonSegments(current, incoming) {
|
|
12
12
|
let currentSegments = (0, split_segments_js_1.splitSegments)(current);
|
|
13
13
|
const incomingSegments = (0, split_segments_js_1.splitSegments)(incoming);
|
|
14
|
-
|
|
14
|
+
// Pre-scan incoming segments to find which ones match existing current segments by prefix
|
|
15
|
+
const initialMatchedIndices = incomingSegments.map((seg) => {
|
|
16
|
+
const p = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(seg).prefix;
|
|
17
|
+
return currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === p);
|
|
18
|
+
});
|
|
19
|
+
for (let incomingIndex = 0; incomingIndex < incomingSegments.length; incomingIndex++) {
|
|
20
|
+
const incomingSegment = incomingSegments[incomingIndex];
|
|
15
21
|
// If the incoming segment is itself a chain (&& or ||), merge subparts accordingly
|
|
16
22
|
if (incomingSegment.includes('||')) {
|
|
17
23
|
const incomingParts = incomingSegment.split('||').map((s) => s.trim()).filter(Boolean);
|
|
@@ -38,7 +44,58 @@ function mergeSemicolonSegments(current, incoming) {
|
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
46
|
if (!mergedIntoCurrent) {
|
|
41
|
-
|
|
47
|
+
// Determine insertion position based on matched incoming segments context
|
|
48
|
+
let previousMatch = -1;
|
|
49
|
+
for (let j = incomingIndex - 1; j >= 0; j--) {
|
|
50
|
+
const mi = initialMatchedIndices[j];
|
|
51
|
+
if (mi >= 0) {
|
|
52
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
53
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
54
|
+
if (pos !== -1) {
|
|
55
|
+
previousMatch = pos;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
let nextMatch = -1;
|
|
61
|
+
for (let j = incomingIndex + 1; j < incomingSegments.length; j++) {
|
|
62
|
+
const mi = initialMatchedIndices[j];
|
|
63
|
+
if (mi >= 0) {
|
|
64
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
65
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
66
|
+
if (pos !== -1) {
|
|
67
|
+
nextMatch = pos;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const incomingBase = ((0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegment).prefix || incomingSegment).split(' ')[0];
|
|
73
|
+
let basePos = null;
|
|
74
|
+
for (let k = currentSegments.length - 1; k >= 0; k--) {
|
|
75
|
+
const cp = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(currentSegments[k]).prefix || currentSegments[k];
|
|
76
|
+
const cpBase = cp.split(' ')[0];
|
|
77
|
+
if (cpBase === incomingBase) {
|
|
78
|
+
basePos = k;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let insertPos;
|
|
83
|
+
if ((previousMatch >= 0) && (nextMatch >= 0)) {
|
|
84
|
+
insertPos = previousMatch + 1;
|
|
85
|
+
}
|
|
86
|
+
else if ((basePos !== null) && (nextMatch < 0)) {
|
|
87
|
+
insertPos = basePos + 1;
|
|
88
|
+
}
|
|
89
|
+
else if (previousMatch >= 0) {
|
|
90
|
+
insertPos = previousMatch + 1;
|
|
91
|
+
}
|
|
92
|
+
else if (nextMatch >= 0) {
|
|
93
|
+
insertPos = nextMatch + 1;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
insertPos = currentSegments.length;
|
|
97
|
+
}
|
|
98
|
+
currentSegments.splice(insertPos, 0, incomingSegment);
|
|
42
99
|
}
|
|
43
100
|
continue;
|
|
44
101
|
}
|
|
@@ -95,7 +152,57 @@ function mergeSemicolonSegments(current, incoming) {
|
|
|
95
152
|
}
|
|
96
153
|
}
|
|
97
154
|
if (!mergedIntoCurrent) {
|
|
98
|
-
|
|
155
|
+
let previousMatch = -1;
|
|
156
|
+
for (let j = incomingIndex - 1; j >= 0; j--) {
|
|
157
|
+
const mi = initialMatchedIndices[j];
|
|
158
|
+
if (mi >= 0) {
|
|
159
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
160
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
161
|
+
if (pos !== -1) {
|
|
162
|
+
previousMatch = pos;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
let nextMatch = -1;
|
|
168
|
+
for (let j = incomingIndex + 1; j < incomingSegments.length; j++) {
|
|
169
|
+
const mi = initialMatchedIndices[j];
|
|
170
|
+
if (mi >= 0) {
|
|
171
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
172
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
173
|
+
if (pos !== -1) {
|
|
174
|
+
nextMatch = pos;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const incomingBase = ((0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegment).prefix || incomingSegment).split(' ')[0];
|
|
180
|
+
let basePos = null;
|
|
181
|
+
for (let k = currentSegments.length - 1; k >= 0; k--) {
|
|
182
|
+
const cp = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(currentSegments[k]).prefix || currentSegments[k];
|
|
183
|
+
const cpBase = cp.split(' ')[0];
|
|
184
|
+
if (cpBase === incomingBase) {
|
|
185
|
+
basePos = k;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
let insertPos;
|
|
190
|
+
if ((previousMatch >= 0) && (nextMatch >= 0)) {
|
|
191
|
+
insertPos = previousMatch + 1;
|
|
192
|
+
}
|
|
193
|
+
else if ((basePos !== null) && (nextMatch < 0)) {
|
|
194
|
+
insertPos = basePos + 1;
|
|
195
|
+
}
|
|
196
|
+
else if (previousMatch >= 0) {
|
|
197
|
+
insertPos = previousMatch + 1;
|
|
198
|
+
}
|
|
199
|
+
else if (nextMatch >= 0) {
|
|
200
|
+
insertPos = nextMatch + 1;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
insertPos = currentSegments.length;
|
|
204
|
+
}
|
|
205
|
+
currentSegments.splice(insertPos, 0, incomingSegment);
|
|
99
206
|
}
|
|
100
207
|
continue;
|
|
101
208
|
}
|
|
@@ -110,7 +217,57 @@ function mergeSemicolonSegments(current, incoming) {
|
|
|
110
217
|
}
|
|
111
218
|
}
|
|
112
219
|
if (!matched) {
|
|
113
|
-
|
|
220
|
+
let previousMatch = -1;
|
|
221
|
+
for (let j = incomingIndex - 1; j >= 0; j--) {
|
|
222
|
+
const mi = initialMatchedIndices[j];
|
|
223
|
+
if (mi >= 0) {
|
|
224
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
225
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
226
|
+
if (pos !== -1) {
|
|
227
|
+
previousMatch = pos;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
let nextMatch = -1;
|
|
233
|
+
for (let j = incomingIndex + 1; j < incomingSegments.length; j++) {
|
|
234
|
+
const mi = initialMatchedIndices[j];
|
|
235
|
+
if (mi >= 0) {
|
|
236
|
+
const pref = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(incomingSegments[j]).prefix;
|
|
237
|
+
const pos = currentSegments.findIndex((cs) => (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(cs).prefix === pref);
|
|
238
|
+
if (pos !== -1) {
|
|
239
|
+
nextMatch = pos;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const incomingBase = (incomingPartsObject.prefix || incomingSegment).split(' ')[0];
|
|
245
|
+
let basePos = null;
|
|
246
|
+
for (let k = currentSegments.length - 1; k >= 0; k--) {
|
|
247
|
+
const cp = (0, split_prefix_and_flags_js_1.splitPrefixAndFlags)(currentSegments[k]).prefix || currentSegments[k];
|
|
248
|
+
const cpBase = cp.split(' ')[0];
|
|
249
|
+
if (cpBase === incomingBase) {
|
|
250
|
+
basePos = k;
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
let insertPos;
|
|
255
|
+
if ((previousMatch >= 0) && (nextMatch >= 0)) {
|
|
256
|
+
insertPos = previousMatch + 1;
|
|
257
|
+
}
|
|
258
|
+
else if ((basePos !== null) && (nextMatch < 0)) {
|
|
259
|
+
insertPos = basePos + 1;
|
|
260
|
+
}
|
|
261
|
+
else if (previousMatch >= 0) {
|
|
262
|
+
insertPos = previousMatch + 1;
|
|
263
|
+
}
|
|
264
|
+
else if (nextMatch >= 0) {
|
|
265
|
+
insertPos = nextMatch + 1;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
insertPos = currentSegments.length;
|
|
269
|
+
}
|
|
270
|
+
currentSegments.splice(insertPos, 0, incomingSegment);
|
|
114
271
|
}
|
|
115
272
|
}
|
|
116
273
|
// Deduplicate top-level semicolon segments by prefix, preserving first occurrence
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fnmatch(filepath: string, glob: string): boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fnmatch = fnmatch;
|
|
7
|
+
const fnmatch_1 = __importDefault(require("editorconfig/src/lib/fnmatch"));
|
|
8
|
+
function fnmatch(filepath, glob) {
|
|
9
|
+
const matchOptions = { matchBase: true, dot: true, noext: true };
|
|
10
|
+
return (0, fnmatch_1.default)(filepath, glob, matchOptions);
|
|
11
|
+
} // }}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function formatTable(rows: string[][], align: string, spaces?: string): string[];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatTable = formatTable;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
function formatTable(rows, align, spaces = ' ') {
|
|
6
|
+
const maxLength = [];
|
|
7
|
+
for (const row of rows) {
|
|
8
|
+
for (const [index, cell] of row.entries()) {
|
|
9
|
+
const length = getVisualLength(cell);
|
|
10
|
+
if (!maxLength[index] || maxLength[index] < length) {
|
|
11
|
+
maxLength[index] = length;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const lines = [];
|
|
16
|
+
for (const row of rows) {
|
|
17
|
+
const cells = [];
|
|
18
|
+
for (const [index, cell] of row.entries()) {
|
|
19
|
+
const pad = align[index] === 'R' ? visualPadStart : visualPadEnd;
|
|
20
|
+
cells.push(pad(cell, maxLength[index]));
|
|
21
|
+
}
|
|
22
|
+
lines.push(cells.join(spaces));
|
|
23
|
+
}
|
|
24
|
+
return lines;
|
|
25
|
+
}
|
|
26
|
+
function getVisualLength(cell) {
|
|
27
|
+
if (cell === '') {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
cell = (0, node_util_1.stripVTControlCharacters)(cell);
|
|
31
|
+
let width = 0;
|
|
32
|
+
for (let i = 0; i < cell.length; i++) {
|
|
33
|
+
const code = cell.codePointAt(i);
|
|
34
|
+
if (!code) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Ignore control characters
|
|
38
|
+
if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Ignore combining characters
|
|
42
|
+
if (code >= 0x3_00 && code <= 0x3_6F) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Surrogates
|
|
46
|
+
if (code > 0xFF_FF) {
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
width += 1;
|
|
50
|
+
}
|
|
51
|
+
return width;
|
|
52
|
+
}
|
|
53
|
+
function visualPadStart(text, pad, char = ' ') {
|
|
54
|
+
return text.padStart(pad - getVisualLength(text) + text.length, char);
|
|
55
|
+
}
|
|
56
|
+
function visualPadEnd(text, pad, char = ' ') {
|
|
57
|
+
return text.padEnd(pad - getVisualLength(text) + text.length, char);
|
|
58
|
+
}
|
package/lib/utils/get-format.js
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getFormat = getFormat;
|
|
7
|
-
const
|
|
8
|
-
function fnmatch(filepath, glob) {
|
|
9
|
-
const matchOptions = { matchBase: true, dot: true, noext: true };
|
|
10
|
-
return (0, fnmatch_1.default)(filepath, glob, matchOptions);
|
|
11
|
-
} // }}}
|
|
4
|
+
const fnmatch_js_1 = require("./fnmatch.js");
|
|
12
5
|
function getFormat(name, formats) {
|
|
13
6
|
for (const format of formats) {
|
|
14
|
-
if (fnmatch(name, format.glob)) {
|
|
7
|
+
if ((0, fnmatch_js_1.fnmatch)(name, format.glob)) {
|
|
15
8
|
return format;
|
|
16
9
|
}
|
|
17
10
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadPackage = loadPackage;
|
|
7
|
+
const cli_utils_1 = require("@zokugun/cli-utils");
|
|
8
|
+
const pacote_1 = __importDefault(require("pacote"));
|
|
9
|
+
const tempy_1 = __importDefault(require("tempy"));
|
|
10
|
+
async function loadPackage(spec, spinner, options) {
|
|
11
|
+
const dir = tempy_1.default.directory();
|
|
12
|
+
const pkgResult = await pacote_1.default.extract(spec, dir);
|
|
13
|
+
if (!pkgResult.resolved) {
|
|
14
|
+
if (options.force || options.skip) {
|
|
15
|
+
spinner.fail();
|
|
16
|
+
if (options.verbose) {
|
|
17
|
+
cli_utils_1.logger.warn(`The artifact '${spec}' couldn't be found, skipping...`);
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
cli_utils_1.logger.fatal(pkgResult.from);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return dir;
|
|
26
|
+
}
|
package/lib/utils/template.js
CHANGED
|
@@ -46,7 +46,6 @@ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
|
|
|
46
46
|
const git_url_parse_1 = __importDefault(require("git-url-parse"));
|
|
47
47
|
const lodash_es_1 = require("lodash-es");
|
|
48
48
|
const YAML = __importStar(require("../parsers/yaml.js"));
|
|
49
|
-
const try_json_js_1 = require("./try-json.js");
|
|
50
49
|
dayjs_1.default.extend(utc_1.default);
|
|
51
50
|
const EXPRESSION_REGEX = /#\[\[(.*?)]]/g;
|
|
52
51
|
const PATH_PROPERTY_REGEX = /^(\w+?)(?:\.|$)(.*)$/;
|
|
@@ -157,7 +156,7 @@ class TemplateEngine {
|
|
|
157
156
|
return (0, xtry_1.ok)(YAML.parse(content));
|
|
158
157
|
}
|
|
159
158
|
else {
|
|
160
|
-
return (0, xtry_1.ok)(
|
|
159
|
+
return (0, xtry_1.ok)(JSON.parse(content) ?? YAML.parse(content));
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
catch (parseError) {
|
|
@@ -197,7 +196,6 @@ class TemplateEngine {
|
|
|
197
196
|
if (readResult.fails) {
|
|
198
197
|
return readResult;
|
|
199
198
|
}
|
|
200
|
-
// const getValueResult = this.getValueByPath(readResult.value, propertyPath);
|
|
201
199
|
const evalResult = this.evaluateExpression(propertyPath, readResult.value);
|
|
202
200
|
if (evalResult.fails) {
|
|
203
201
|
return evalResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function timeDifference(from: number | string, to?: number): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.timeDifference = timeDifference;
|
|
4
|
+
const cli_utils_1 = require("@zokugun/cli-utils");
|
|
5
|
+
const is_it_type_1 = require("@zokugun/is-it-type");
|
|
6
|
+
const msPerMinute = 60 * 1000;
|
|
7
|
+
const msPerHour = msPerMinute * 60;
|
|
8
|
+
const msPerDay = msPerHour * 24;
|
|
9
|
+
const msPerMonth = msPerDay * 30;
|
|
10
|
+
const msPerYear = msPerDay * 365;
|
|
11
|
+
function timeDifference(from, to = Date.now()) {
|
|
12
|
+
if ((0, is_it_type_1.isString)(from)) {
|
|
13
|
+
from = (new Date(from)).getTime();
|
|
14
|
+
}
|
|
15
|
+
const elapsed = to - from;
|
|
16
|
+
if (elapsed < msPerDay) {
|
|
17
|
+
return cli_utils_1.c.gray('⩽1d');
|
|
18
|
+
}
|
|
19
|
+
else if (elapsed < msPerMonth) {
|
|
20
|
+
return cli_utils_1.c.green(`~${Math.round(elapsed / msPerDay)}d`);
|
|
21
|
+
}
|
|
22
|
+
else if (elapsed < msPerYear) {
|
|
23
|
+
return cli_utils_1.c.yellow(`~${Math.round(elapsed / msPerMonth)}mo`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return cli_utils_1.c.red(`~${(elapsed / msPerYear).toFixed(1)}y`);
|
|
27
|
+
}
|
|
28
|
+
}
|
package/package.json
CHANGED
|
@@ -1,127 +1,130 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
2
|
+
"name": "@zokugun/artifact",
|
|
3
|
+
"description": "Boilerplate your project & keep your configurations up to date",
|
|
4
|
+
"version": "0.9.0",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Baptiste Augrain",
|
|
7
|
+
"email": "daiyam@zokugun.org"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"homepage": "https://github.com/zokugun/artifact",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/zokugun/artifact.git"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/zokugun/artifact/discussions/categories/issue-triage"
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=18.20"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"artifact": "bin/artifact",
|
|
23
|
+
"atf": "bin/artifact"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"audit:fix": "npm audit fix --min-release-age=0",
|
|
27
|
+
"build": "npm run clean && npm run compile:src",
|
|
28
|
+
"ci:lint": "zizmor .",
|
|
29
|
+
"ci:lint:fix": "zizmor . --fix=all",
|
|
30
|
+
"clean": "rimraf .test lib",
|
|
31
|
+
"compile:src": "tsc -p src",
|
|
32
|
+
"lint": "xo",
|
|
33
|
+
"lint:all": "fixpack && npm run lint:package && npm run ci:lint && npm run lint",
|
|
34
|
+
"lint:fix": "xo --fix",
|
|
35
|
+
"lint:package": "fixpack || true",
|
|
36
|
+
"prepare": "husky; npm run lint:package",
|
|
37
|
+
"release": "release-it",
|
|
38
|
+
"test": "tsc -p test && mocha",
|
|
39
|
+
"test:dev": "mocha",
|
|
40
|
+
"test:watch": "tsc-watch -p src -p test --onSuccess 'mocha -g=\"\"'",
|
|
41
|
+
"update:artifacts": "artifact update",
|
|
42
|
+
"update:ci": "PINACT_MIN_AGE=7 pinact run --update",
|
|
43
|
+
"update:deps": "taze --all",
|
|
44
|
+
"watch:build": "tsc-watch -p src --onSuccess 'npm run build'",
|
|
45
|
+
"watch:src": "tsc-watch -p src",
|
|
46
|
+
"watch:test": "tsc-watch -p test"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@types/cli-progress": "3.11.6",
|
|
50
|
+
"@zokugun/cli-utils": "0.3.2",
|
|
51
|
+
"@zokugun/configdotts-merge": "0.3.0",
|
|
52
|
+
"@zokugun/fs-extra-plus": "0.3.7",
|
|
53
|
+
"@zokugun/is-it-type": "0.8.1",
|
|
54
|
+
"@zokugun/xtry": "0.11.4",
|
|
55
|
+
"cli-progress": "3.12.0",
|
|
56
|
+
"dayjs": "1.11.20",
|
|
57
|
+
"editorconfig": "0.15.3",
|
|
58
|
+
"git-url-parse": "16.1.0",
|
|
59
|
+
"globby": "11.1.0",
|
|
60
|
+
"istextorbinary": "6.0.0",
|
|
61
|
+
"jq-wasm": "1.1.0-jq-1.8.1",
|
|
62
|
+
"jsonc-parser": "3.3.1",
|
|
63
|
+
"lodash-es": "4.18.1",
|
|
64
|
+
"micromatch": "4.0.8",
|
|
65
|
+
"pacote": "21.5.0",
|
|
66
|
+
"semver": "7.7.4",
|
|
67
|
+
"tempy": "1.0.1",
|
|
68
|
+
"untildify": "4.0.0",
|
|
69
|
+
"yaml": "2.8.3"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@commitlint/cli": "20.5.2",
|
|
73
|
+
"@commitlint/config-conventional": "20.5.0",
|
|
74
|
+
"@types/chai": "4.3.20",
|
|
75
|
+
"@types/chai-as-promised": "7.1.8",
|
|
76
|
+
"@types/lodash-es": "4.17.12",
|
|
77
|
+
"@types/micromatch": "4.0.10",
|
|
78
|
+
"@types/mocha": "9.1.1",
|
|
79
|
+
"@types/node": "20.19.39",
|
|
80
|
+
"@types/npm": "7.19.3",
|
|
81
|
+
"@types/pacote": "11.1.8",
|
|
82
|
+
"@types/semver": "7.7.1",
|
|
83
|
+
"@types/universalify": "1.0.3",
|
|
84
|
+
"camelcase": "6.3.0",
|
|
85
|
+
"chai": "4.5.0",
|
|
86
|
+
"chai-as-promised": "7.1.2",
|
|
87
|
+
"eslint": "8.11.0",
|
|
88
|
+
"eslint-plugin-chai-friendly": "0.7.4",
|
|
89
|
+
"fixpack": "4.0.0",
|
|
90
|
+
"husky": "9.1.7",
|
|
91
|
+
"lint-staged": "16.4.0",
|
|
92
|
+
"memfs": "3.6.0",
|
|
93
|
+
"mocha": "9.2.2",
|
|
94
|
+
"release-it": "20.0.1",
|
|
95
|
+
"rewiremock": "3.14.6",
|
|
96
|
+
"rimraf": "6.1.3",
|
|
97
|
+
"source-map-support": "0.5.21",
|
|
98
|
+
"taze": "19.11.0",
|
|
99
|
+
"tsc-watch": "7.2.0",
|
|
100
|
+
"typescript": "5.9.3",
|
|
101
|
+
"universalify": "2.0.1",
|
|
102
|
+
"xo": "0.60.0"
|
|
103
|
+
},
|
|
104
|
+
"overrides": {
|
|
105
|
+
"mocha": {
|
|
106
|
+
"diff": "5.2.2",
|
|
107
|
+
"glob": "8.1.0",
|
|
108
|
+
"js-yaml": "4.1.1",
|
|
109
|
+
"minimatch": "4.2.6",
|
|
110
|
+
"nanoid": "3.3.11",
|
|
111
|
+
"serialize-javascript": "7.0.5"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"keywords": [
|
|
115
|
+
"artifact",
|
|
116
|
+
"boilerplate",
|
|
117
|
+
"boilerplates",
|
|
118
|
+
"codegeneration",
|
|
119
|
+
"codemod",
|
|
120
|
+
"codemods",
|
|
121
|
+
"configuration",
|
|
122
|
+
"configurations",
|
|
123
|
+
"generate",
|
|
124
|
+
"generator",
|
|
125
|
+
"project-generator",
|
|
126
|
+
"project-starter",
|
|
127
|
+
"project-template",
|
|
128
|
+
"scaffold"
|
|
129
|
+
]
|
|
127
130
|
}
|