@packtory/cli 0.0.8 → 0.0.10
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/command-line-interface/config-loader.js +7 -5
- package/command-line-interface/config-loader.js.map +1 -1
- package/command-line-interface/one-time-password-prompt.js +29 -0
- package/command-line-interface/one-time-password-prompt.js.map +1 -0
- package/command-line-interface/preview-io-shared.js +75 -0
- package/command-line-interface/preview-io-shared.js.map +1 -0
- package/command-line-interface/preview-io.js +15 -0
- package/command-line-interface/preview-io.js.map +1 -0
- package/command-line-interface/runner.js +211 -76
- package/command-line-interface/runner.js.map +1 -1
- package/command-line-interface/spinner-boot.js +9 -0
- package/command-line-interface/spinner-boot.js.map +1 -0
- package/command-line-interface/spinner-shared-state.js +167 -0
- package/command-line-interface/spinner-shared-state.js.map +1 -0
- package/command-line-interface/spinner-worker-backend.js +62 -0
- package/command-line-interface/spinner-worker-backend.js.map +1 -0
- package/command-line-interface/spinner-worker-loop.js +94 -0
- package/command-line-interface/spinner-worker-loop.js.map +1 -0
- package/command-line-interface/terminal-spinner-renderer.js +21 -15
- package/command-line-interface/terminal-spinner-renderer.js.map +1 -1
- package/common/typed-diff.js +5 -0
- package/common/typed-diff.js.map +1 -0
- package/package.json +14 -9
- package/packages/command-line-interface/command-line-interface.entry-point.d.ts +1 -1
- package/packages/command-line-interface/command-line-interface.entry-point.d.ts.map +1 -1
- package/packages/command-line-interface/command-line-interface.entry-point.js +61 -7
- package/packages/command-line-interface/command-line-interface.entry-point.js.map +1 -1
- package/packages/command-line-interface/spinner-boot.entry-point.js +25 -0
- package/packages/command-line-interface/spinner-boot.entry-point.js.map +1 -0
- package/packages/command-line-interface/spinner-worker.entry-point.js +16 -0
- package/packages/command-line-interface/spinner-worker.entry-point.js.map +1 -0
- package/readme.md +33 -1
- package/report/changed-artifacts.js +10 -0
- package/report/changed-artifacts.js.map +1 -0
- package/report/html-escaping.js +9 -0
- package/report/html-escaping.js.map +1 -0
- package/report/html-renderer.js +337 -0
- package/report/html-renderer.js.map +1 -0
- package/report/preview-document-diff.js +17 -0
- package/report/preview-document-diff.js.map +1 -0
- package/report/preview-document-helpers.js +173 -0
- package/report/preview-document-helpers.js.map +1 -0
- package/report/preview-document-tree.js +13 -0
- package/report/preview-document-tree.js.map +1 -0
- package/report/preview-document.js +97 -0
- package/report/preview-document.js.map +1 -0
- package/report/terminal-preview-renderer-shared.js +41 -0
- package/report/terminal-preview-renderer-shared.js.map +1 -0
- package/report/terminal-preview-renderer.js +94 -0
- package/report/terminal-preview-renderer.js.map +1 -0
- package/sbom.cdx.json +118 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
const headerByteLength = 16;
|
|
2
|
+
const slotByteLength = 384;
|
|
3
|
+
const labelByteLength = 64;
|
|
4
|
+
const messageByteLength = 256;
|
|
5
|
+
const slotStateOffset = 4;
|
|
6
|
+
const slotLabelLengthOffset = 8;
|
|
7
|
+
const slotMessageLengthOffset = 10;
|
|
8
|
+
const slotLabelOffset = 16;
|
|
9
|
+
const slotMessageOffset = slotLabelOffset + labelByteLength;
|
|
10
|
+
const headerControlIndex = 0;
|
|
11
|
+
const headerColumnsIndex = 1;
|
|
12
|
+
const headerIntervalIndex = 2;
|
|
13
|
+
const slotGenerationIndex = 0;
|
|
14
|
+
const controlShutdownValue = 1;
|
|
15
|
+
const controlIdleValue = 0;
|
|
16
|
+
const maximumReadSlotAttempts = 1024;
|
|
17
|
+
const slotStateEmpty = 0;
|
|
18
|
+
const slotStateRunning = 1;
|
|
19
|
+
const slotStateSucceeded = 2;
|
|
20
|
+
const slotStateFailed = 3;
|
|
21
|
+
const slotStateCanceled = 4;
|
|
22
|
+
const textEncoder = new TextEncoder();
|
|
23
|
+
const textDecoder = new TextDecoder();
|
|
24
|
+
const stateToByteMap = {
|
|
25
|
+
empty: slotStateEmpty,
|
|
26
|
+
running: slotStateRunning,
|
|
27
|
+
succeeded: slotStateSucceeded,
|
|
28
|
+
failed: slotStateFailed,
|
|
29
|
+
canceled: slotStateCanceled
|
|
30
|
+
};
|
|
31
|
+
const byteToStateMap = {
|
|
32
|
+
[slotStateEmpty]: 'empty',
|
|
33
|
+
[slotStateRunning]: 'running',
|
|
34
|
+
[slotStateSucceeded]: 'succeeded',
|
|
35
|
+
[slotStateFailed]: 'failed',
|
|
36
|
+
[slotStateCanceled]: 'canceled'
|
|
37
|
+
};
|
|
38
|
+
export function createSpinnerSharedLayout(slotCount) {
|
|
39
|
+
return {
|
|
40
|
+
bufferByteLength: headerByteLength + slotCount * slotByteLength,
|
|
41
|
+
slotCount,
|
|
42
|
+
slotByteLength,
|
|
43
|
+
headerByteLength
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function stateToByte(state) {
|
|
47
|
+
return stateToByteMap[state];
|
|
48
|
+
}
|
|
49
|
+
function byteToState(byte) {
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- writers always go through stateToByteMap so the byte is one of the known state values
|
|
51
|
+
return byteToStateMap[byte];
|
|
52
|
+
}
|
|
53
|
+
const labelSlice = {
|
|
54
|
+
contentOffset: slotLabelOffset,
|
|
55
|
+
contentCapacity: labelByteLength,
|
|
56
|
+
lengthOffset: slotLabelLengthOffset
|
|
57
|
+
};
|
|
58
|
+
const messageSlice = {
|
|
59
|
+
contentOffset: slotMessageOffset,
|
|
60
|
+
contentCapacity: messageByteLength,
|
|
61
|
+
lengthOffset: slotMessageLengthOffset
|
|
62
|
+
};
|
|
63
|
+
function createViews(buffer, layout) {
|
|
64
|
+
const headerInt32 = new Int32Array(buffer);
|
|
65
|
+
const headerUint32 = new Uint32Array(buffer);
|
|
66
|
+
const slotOffset = (slotIndex) => {
|
|
67
|
+
return layout.headerByteLength + slotIndex * layout.slotByteLength;
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
headerInt32,
|
|
71
|
+
headerUint32,
|
|
72
|
+
slotInt32: (slotIndex) => {
|
|
73
|
+
return new Int32Array(buffer, slotOffset(slotIndex), 1);
|
|
74
|
+
},
|
|
75
|
+
slotBytes: (slotIndex) => {
|
|
76
|
+
return new Uint8Array(buffer, slotOffset(slotIndex), layout.slotByteLength);
|
|
77
|
+
},
|
|
78
|
+
slotData: (slotIndex) => {
|
|
79
|
+
return new DataView(buffer, slotOffset(slotIndex), layout.slotByteLength);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function writeStringIntoSlot(views, slotIndex, slice, value) {
|
|
84
|
+
const target = views
|
|
85
|
+
.slotBytes(slotIndex)
|
|
86
|
+
.subarray(slice.contentOffset, slice.contentOffset + slice.contentCapacity);
|
|
87
|
+
target.fill(0);
|
|
88
|
+
const { written } = textEncoder.encodeInto(value, target);
|
|
89
|
+
views.slotData(slotIndex).setUint16(slice.lengthOffset, written, true);
|
|
90
|
+
}
|
|
91
|
+
function readStringFromSlot(views, slotIndex, slice) {
|
|
92
|
+
const length = views.slotData(slotIndex).getUint16(slice.lengthOffset, true);
|
|
93
|
+
return textDecoder.decode(views.slotBytes(slotIndex).subarray(slice.contentOffset, slice.contentOffset + length));
|
|
94
|
+
}
|
|
95
|
+
function readSlotContent(views, slotIndex) {
|
|
96
|
+
return {
|
|
97
|
+
state: byteToState(views.slotData(slotIndex).getUint8(slotStateOffset)),
|
|
98
|
+
label: readStringFromSlot(views, slotIndex, labelSlice),
|
|
99
|
+
message: readStringFromSlot(views, slotIndex, messageSlice)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function createSpinnerSharedAccessors(buffer, layout) {
|
|
103
|
+
const views = createViews(buffer, layout);
|
|
104
|
+
function writeStateByte(slotIndex, stateByte) {
|
|
105
|
+
views.slotData(slotIndex).setUint8(slotStateOffset, stateByte);
|
|
106
|
+
}
|
|
107
|
+
function readSlotGeneration(slotIndex) {
|
|
108
|
+
return Atomics.load(views.slotInt32(slotIndex), slotGenerationIndex);
|
|
109
|
+
}
|
|
110
|
+
function readSlotAttempt(slotIndex) {
|
|
111
|
+
return {
|
|
112
|
+
slot: readSlotContent(views, slotIndex),
|
|
113
|
+
generationAfter: readSlotGeneration(slotIndex)
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
layout,
|
|
118
|
+
buffer,
|
|
119
|
+
setColumns(columns) {
|
|
120
|
+
Atomics.store(views.headerUint32, headerColumnsIndex, columns);
|
|
121
|
+
},
|
|
122
|
+
getColumns() {
|
|
123
|
+
return Atomics.load(views.headerUint32, headerColumnsIndex);
|
|
124
|
+
},
|
|
125
|
+
setIntervalMs(intervalMs) {
|
|
126
|
+
Atomics.store(views.headerUint32, headerIntervalIndex, intervalMs);
|
|
127
|
+
},
|
|
128
|
+
getIntervalMs() {
|
|
129
|
+
return Atomics.load(views.headerUint32, headerIntervalIndex);
|
|
130
|
+
},
|
|
131
|
+
requestShutdown() {
|
|
132
|
+
Atomics.store(views.headerInt32, headerControlIndex, controlShutdownValue);
|
|
133
|
+
},
|
|
134
|
+
isShutdownRequested() {
|
|
135
|
+
return Atomics.load(views.headerInt32, headerControlIndex) !== controlIdleValue;
|
|
136
|
+
},
|
|
137
|
+
bumpSlotGeneration(slotIndex) {
|
|
138
|
+
Atomics.add(views.slotInt32(slotIndex), slotGenerationIndex, 1);
|
|
139
|
+
},
|
|
140
|
+
writeSlot(slotIndex, state, label, message) {
|
|
141
|
+
writeStateByte(slotIndex, stateToByte(state));
|
|
142
|
+
writeStringIntoSlot(views, slotIndex, labelSlice, label);
|
|
143
|
+
writeStringIntoSlot(views, slotIndex, messageSlice, message);
|
|
144
|
+
},
|
|
145
|
+
readSlot(slotIndex) {
|
|
146
|
+
// Seqlock retry: writers atomically bump the slot generation after
|
|
147
|
+
// updating the (non-atomic) label/message bytes; if the generation
|
|
148
|
+
// moves between the two reads we observed a torn write and retry.
|
|
149
|
+
let generationBefore = readSlotGeneration(slotIndex);
|
|
150
|
+
const attempts = Array.from({ length: maximumReadSlotAttempts + 1 }, (_value, index) => {
|
|
151
|
+
return maximumReadSlotAttempts - index;
|
|
152
|
+
});
|
|
153
|
+
for (const remainingAttempts of attempts) {
|
|
154
|
+
if (remainingAttempts === 0) {
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
const attemptResult = readSlotAttempt(slotIndex);
|
|
158
|
+
if (attemptResult.generationAfter === generationBefore) {
|
|
159
|
+
return attemptResult.slot;
|
|
160
|
+
}
|
|
161
|
+
generationBefore = attemptResult.generationAfter;
|
|
162
|
+
}
|
|
163
|
+
throw new Error('Failed to read a stable spinner slot snapshot');
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=spinner-shared-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-shared-state.js","sourceRoot":"","sources":["../../../../source/command-line-interface/spinner-shared-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createSpinnerSharedAccessors, createSpinnerSharedLayout } from "./spinner-shared-state.js";
|
|
2
|
+
const defaultSlotCount = 64;
|
|
3
|
+
const defaultIntervalMs = 80;
|
|
4
|
+
const defaultColumns = 80;
|
|
5
|
+
function resolveOptions(options) {
|
|
6
|
+
return {
|
|
7
|
+
slotCount: options.slotCount ?? defaultSlotCount,
|
|
8
|
+
intervalMs: options.intervalMs ?? defaultIntervalMs,
|
|
9
|
+
stdoutFileDescriptor: options.stdoutFileDescriptor ?? process.stdout.fd,
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- process.stdout.columns is undefined at runtime when stdout is not a TTY, despite the type declaring it as number
|
|
11
|
+
stdoutColumns: options.stdoutColumns ?? process.stdout.columns ?? defaultColumns,
|
|
12
|
+
spawnWorker: options.spawnWorker
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function setupSharedBuffer(resolved) {
|
|
16
|
+
const layout = createSpinnerSharedLayout(resolved.slotCount);
|
|
17
|
+
const buffer = new SharedArrayBuffer(layout.bufferByteLength);
|
|
18
|
+
const accessors = createSpinnerSharedAccessors(buffer, layout);
|
|
19
|
+
accessors.setIntervalMs(resolved.intervalMs);
|
|
20
|
+
accessors.setColumns(resolved.stdoutColumns);
|
|
21
|
+
return accessors;
|
|
22
|
+
}
|
|
23
|
+
export function createSpinnerRuntime(options) {
|
|
24
|
+
const resolved = resolveOptions(options);
|
|
25
|
+
const accessors = setupSharedBuffer(resolved);
|
|
26
|
+
resolved.spawnWorker({
|
|
27
|
+
buffer: accessors.buffer,
|
|
28
|
+
slotCount: accessors.layout.slotCount,
|
|
29
|
+
stdoutFileDescriptor: resolved.stdoutFileDescriptor
|
|
30
|
+
});
|
|
31
|
+
return { accessors, slotCount: resolved.slotCount };
|
|
32
|
+
}
|
|
33
|
+
function writeSlot(accessors, update) {
|
|
34
|
+
accessors.writeSlot(update.slotIndex, update.state, update.label, update.message);
|
|
35
|
+
accessors.bumpSlotGeneration(update.slotIndex);
|
|
36
|
+
}
|
|
37
|
+
export function createWorkerSpinnerBackend(dependencies) {
|
|
38
|
+
const { runtime } = dependencies;
|
|
39
|
+
function ensureSlotIndexFits(slotIndex) {
|
|
40
|
+
if (slotIndex >= runtime.slotCount) {
|
|
41
|
+
throw new RangeError(`Spinner slot index ${slotIndex} exceeds backend capacity ${runtime.slotCount}; increase slotCount`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
add(slotIndex, label, message) {
|
|
46
|
+
ensureSlotIndexFits(slotIndex);
|
|
47
|
+
writeSlot(runtime.accessors, { slotIndex, state: 'running', label, message });
|
|
48
|
+
},
|
|
49
|
+
update(slotIndex, label, message) {
|
|
50
|
+
ensureSlotIndexFits(slotIndex);
|
|
51
|
+
writeSlot(runtime.accessors, { slotIndex, state: 'running', label, message });
|
|
52
|
+
},
|
|
53
|
+
finish(slotIndex, status, label, message) {
|
|
54
|
+
ensureSlotIndexFits(slotIndex);
|
|
55
|
+
writeSlot(runtime.accessors, { slotIndex, state: status, label, message });
|
|
56
|
+
},
|
|
57
|
+
shutdown() {
|
|
58
|
+
runtime.accessors.requestShutdown();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=spinner-worker-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-worker-backend.js","sourceRoot":"","sources":["../../../../source/command-line-interface/spinner-worker-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { times } from 'remeda';
|
|
2
|
+
import { bold, green, red } from 'yoctocolors';
|
|
3
|
+
import { createSpinnerSharedAccessors, createSpinnerSharedLayout } from "./spinner-shared-state.js";
|
|
4
|
+
const spinnerFrames = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';
|
|
5
|
+
const successSymbol = bold(green('✔'));
|
|
6
|
+
const failureSymbol = bold(red('✖'));
|
|
7
|
+
const cursorUp = (lines) => {
|
|
8
|
+
return `[${lines}A`;
|
|
9
|
+
};
|
|
10
|
+
const clearEntireLine = '[2K';
|
|
11
|
+
const cursorToColumnZero = '\r';
|
|
12
|
+
function readSlotSnapshot(accessors, slotIndex) {
|
|
13
|
+
return accessors.readSlot(slotIndex);
|
|
14
|
+
}
|
|
15
|
+
function selectGlyph(state, frameIndex) {
|
|
16
|
+
if (state === 'succeeded') {
|
|
17
|
+
return successSymbol;
|
|
18
|
+
}
|
|
19
|
+
if (state === 'failed' || state === 'canceled') {
|
|
20
|
+
return failureSymbol;
|
|
21
|
+
}
|
|
22
|
+
return spinnerFrames.charAt(frameIndex % spinnerFrames.length);
|
|
23
|
+
}
|
|
24
|
+
function truncateToColumns(line, columns) {
|
|
25
|
+
if (columns <= 0) {
|
|
26
|
+
return line;
|
|
27
|
+
}
|
|
28
|
+
return line.slice(0, columns);
|
|
29
|
+
}
|
|
30
|
+
function formatLine(snapshot, frameIndex, columns) {
|
|
31
|
+
const glyph = selectGlyph(snapshot.state, frameIndex);
|
|
32
|
+
const composed = `${glyph} ${snapshot.label}: ${snapshot.message}`;
|
|
33
|
+
return truncateToColumns(composed, columns);
|
|
34
|
+
}
|
|
35
|
+
function readAllSnapshots(accessors) {
|
|
36
|
+
return times(accessors.layout.slotCount, (slotIndex) => {
|
|
37
|
+
return readSlotSnapshot(accessors, slotIndex);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function findHighestActiveSlotIndex(snapshots) {
|
|
41
|
+
return snapshots.findLastIndex((snapshot) => {
|
|
42
|
+
return snapshot.state !== 'empty';
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function buildRedrawSequence(state, columns, expectedLineCount) {
|
|
46
|
+
let output = '';
|
|
47
|
+
if (state.renderedLineCount > 0) {
|
|
48
|
+
output += cursorUp(state.renderedLineCount);
|
|
49
|
+
}
|
|
50
|
+
const visibleSnapshots = state.snapshots.slice(0, expectedLineCount);
|
|
51
|
+
for (const snapshot of visibleSnapshots) {
|
|
52
|
+
const line = formatLine(snapshot, state.frameIndex, columns);
|
|
53
|
+
output += `${clearEntireLine + cursorToColumnZero + line}\n`;
|
|
54
|
+
}
|
|
55
|
+
return output;
|
|
56
|
+
}
|
|
57
|
+
export function startSpinnerWorker(input, dependencies) {
|
|
58
|
+
const layout = createSpinnerSharedLayout(input.slotCount);
|
|
59
|
+
const accessors = createSpinnerSharedAccessors(input.buffer, layout);
|
|
60
|
+
const state = {
|
|
61
|
+
snapshots: readAllSnapshots(accessors),
|
|
62
|
+
renderedLineCount: 0,
|
|
63
|
+
frameIndex: 0
|
|
64
|
+
};
|
|
65
|
+
function renderTick() {
|
|
66
|
+
const snapshots = readAllSnapshots(accessors);
|
|
67
|
+
const highestActive = findHighestActiveSlotIndex(snapshots);
|
|
68
|
+
if (highestActive < 0 && state.renderedLineCount === 0) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const expectedLineCount = Math.max(state.renderedLineCount, highestActive + 1);
|
|
72
|
+
state.snapshots = snapshots;
|
|
73
|
+
const sequence = buildRedrawSequence(state, accessors.getColumns(), expectedLineCount);
|
|
74
|
+
dependencies.write(input.stdoutFileDescriptor, sequence);
|
|
75
|
+
state.renderedLineCount = expectedLineCount;
|
|
76
|
+
state.frameIndex += 1;
|
|
77
|
+
}
|
|
78
|
+
const intervalMs = accessors.getIntervalMs();
|
|
79
|
+
const ticker = dependencies.setInterval(() => {
|
|
80
|
+
renderTick();
|
|
81
|
+
if (accessors.isShutdownRequested()) {
|
|
82
|
+
renderTick();
|
|
83
|
+
dependencies.clearInterval(ticker);
|
|
84
|
+
}
|
|
85
|
+
}, intervalMs);
|
|
86
|
+
}
|
|
87
|
+
export function isSpinnerWorkerInput(value) {
|
|
88
|
+
return (typeof value === 'object' &&
|
|
89
|
+
value !== null &&
|
|
90
|
+
Reflect.get(value, 'buffer') instanceof SharedArrayBuffer &&
|
|
91
|
+
typeof Reflect.get(value, 'slotCount') === 'number' &&
|
|
92
|
+
typeof Reflect.get(value, 'stdoutFileDescriptor') === 'number');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=spinner-worker-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-worker-loop.js","sourceRoot":"","sources":["../../../../source/command-line-interface/spinner-worker-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
const cancelMessage = 'Canceled …';
|
|
1
2
|
export function createTerminalSpinnerRenderer(dependencies) {
|
|
2
|
-
const {
|
|
3
|
+
const { backend } = dependencies;
|
|
3
4
|
const spinners = new Map();
|
|
5
|
+
const usedSlots = new Set();
|
|
6
|
+
function nextFreeSlotIndex() {
|
|
7
|
+
return usedSlots.size;
|
|
8
|
+
}
|
|
4
9
|
function getSpinnerById(id) {
|
|
5
10
|
const spinner = spinners.get(id);
|
|
6
11
|
if (spinner === undefined) {
|
|
@@ -16,31 +21,32 @@ export function createTerminalSpinnerRenderer(dependencies) {
|
|
|
16
21
|
return {
|
|
17
22
|
add(id, label, message) {
|
|
18
23
|
ensureIdDoesNotExist(id);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
24
|
+
const slotIndex = nextFreeSlotIndex();
|
|
25
|
+
usedSlots.add(slotIndex);
|
|
26
|
+
spinners.set(id, { slotIndex, label, message, status: 'running' });
|
|
27
|
+
backend.add(slotIndex, label, message);
|
|
22
28
|
},
|
|
23
29
|
updateMessage(id, message) {
|
|
24
30
|
const spinner = getSpinnerById(id);
|
|
25
|
-
spinner.
|
|
31
|
+
spinner.message = message;
|
|
32
|
+
backend.update(spinner.slotIndex, spinner.label, message);
|
|
26
33
|
},
|
|
27
34
|
stop(id, status, message) {
|
|
28
35
|
const spinner = getSpinnerById(id);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
else {
|
|
34
|
-
spinner.instance.succeed(message);
|
|
35
|
-
}
|
|
36
|
+
spinner.message = message;
|
|
37
|
+
spinner.status = status;
|
|
38
|
+
const finalState = status === 'success' ? 'succeeded' : 'failed';
|
|
39
|
+
backend.finish(spinner.slotIndex, finalState, spinner.label, message);
|
|
36
40
|
},
|
|
37
41
|
stopAll() {
|
|
38
42
|
for (const spinner of spinners.values()) {
|
|
39
|
-
if (spinner.
|
|
40
|
-
spinner.
|
|
43
|
+
if (spinner.status === 'running') {
|
|
44
|
+
spinner.message = cancelMessage;
|
|
45
|
+
backend.finish(spinner.slotIndex, 'canceled', spinner.label, cancelMessage);
|
|
41
46
|
}
|
|
42
47
|
}
|
|
43
|
-
|
|
48
|
+
spinners.clear();
|
|
49
|
+
backend.shutdown();
|
|
44
50
|
}
|
|
45
51
|
};
|
|
46
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-spinner-renderer.js","sourceRoot":"","sources":["../../../../source/command-line-interface/terminal-spinner-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"terminal-spinner-renderer.js","sourceRoot":"","sources":["../../../../source/command-line-interface/terminal-spinner-renderer.ts"],"names":[],"mappings":"AAgCA,MAAM,aAAa,GAAG,YAAY,CAAC;AAEnC,MAAM,UAAU,6BAA6B,CACzC,YAAiD;IAEjD,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,SAAS,iBAAiB;QACtB,OAAO,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,SAAS,cAAc,CAAC,EAAU;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,SAAS,oBAAoB,CAAC,EAAU;QACpC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,OAAO;QACH,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO;YAClB,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAEzB,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,aAAa,CAAC,EAAE,EAAE,OAAO;YACrB,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO;YACpB,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;YACjE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO;YACH,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC/B,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC;oBAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-diff.js","sourceRoot":"","sources":["../../../../source/common/typed-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiE,MAAM,MAAM,CAAC;AAYtG,MAAM,UAAU,qBAAqB,CAAC,GAAG,IAAyB;IAC9D,OAAO,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"author": "Mathias Schreck <schreck.mathias@gmail.com>",
|
|
3
3
|
"bin": {
|
|
4
|
-
"packtory": "packages/command-line-interface/command-line-interface.entry-point.js"
|
|
4
|
+
"packtory": "./packages/command-line-interface/command-line-interface.entry-point.js"
|
|
5
5
|
},
|
|
6
6
|
"contributors": [
|
|
7
7
|
"Christian Rackerseder <github@echooff.de>"
|
|
8
8
|
],
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@topcli/spinner": "4.2.1",
|
|
11
10
|
"cmd-ts": "0.15.0",
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
11
|
+
"diff": "9.0.0",
|
|
12
|
+
"packtory": "0.0.10",
|
|
13
|
+
"remeda": "2.34.1",
|
|
14
|
+
"yoctocolors": "2.1.2"
|
|
15
15
|
},
|
|
16
16
|
"description": "Effortlessly bundle and publish npm packages from the command line with @packtory/cli.",
|
|
17
17
|
"engines": {
|
|
18
|
-
"node": "^
|
|
18
|
+
"node": "^24 || ^26"
|
|
19
19
|
},
|
|
20
|
+
"exports": {},
|
|
20
21
|
"keywords": [
|
|
21
22
|
"bundler",
|
|
22
23
|
"bundling",
|
|
@@ -30,13 +31,17 @@
|
|
|
30
31
|
"versioning"
|
|
31
32
|
],
|
|
32
33
|
"license": "MIT",
|
|
33
|
-
"main": "packages/command-line-interface/command-line-interface.entry-point.js",
|
|
34
34
|
"name": "@packtory/cli",
|
|
35
35
|
"repository": {
|
|
36
36
|
"type": "git",
|
|
37
37
|
"url": "git+ssh://git@github.com/enormora/packtory.git"
|
|
38
38
|
},
|
|
39
|
+
"sideEffects": [
|
|
40
|
+
"./command-line-interface/preview-io.js",
|
|
41
|
+
"./packages/command-line-interface/command-line-interface.entry-point.js",
|
|
42
|
+
"./packages/command-line-interface/spinner-boot.entry-point.js",
|
|
43
|
+
"./packages/command-line-interface/spinner-worker.entry-point.js"
|
|
44
|
+
],
|
|
39
45
|
"type": "module",
|
|
40
|
-
"
|
|
41
|
-
"version": "0.0.8"
|
|
46
|
+
"version": "0.0.10"
|
|
42
47
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import type * as configTypes from 'packtory/config/config.ts';
|
|
2
|
+
import type * as configTypes from 'packtory/config/config.d.ts';
|
|
3
3
|
export type PacktoryConfig = configTypes.PacktoryConfig;
|
|
4
4
|
//# sourceMappingURL=command-line-interface.entry-point.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-line-interface.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/command-line-interface/command-line-interface.entry-point.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"command-line-interface.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/command-line-interface/command-line-interface.entry-point.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,KAAK,WAAW,MAAM,wBAAwB,CAAC;AAsF3D,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC"}
|
|
@@ -7,25 +7,79 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
7
7
|
}
|
|
8
8
|
return path;
|
|
9
9
|
};
|
|
10
|
-
import
|
|
10
|
+
import fs from 'node:fs/promises';
|
|
11
|
+
import readline from 'node:readline/promises';
|
|
12
|
+
import { createClock } from "packtory/common/clock.js";
|
|
13
|
+
import { bootedSpinnerRuntime } from "./spinner-boot.entry-point.js";
|
|
14
|
+
import { createOneTimePasswordPrompt } from "../../command-line-interface/one-time-password-prompt.js";
|
|
11
15
|
import { createCommandLineInterfaceRunner } from "../../command-line-interface/runner.js";
|
|
12
16
|
import { createTerminalSpinnerRenderer } from "../../command-line-interface/terminal-spinner-renderer.js";
|
|
17
|
+
import { createWorkerSpinnerBackend } from "../../command-line-interface/spinner-worker-backend.js";
|
|
13
18
|
import { createConfigLoader } from "../../command-line-interface/config-loader.js";
|
|
14
|
-
import {
|
|
19
|
+
import { previewIo } from "../../command-line-interface/preview-io.js";
|
|
20
|
+
import { createPacktory } from "packtory/packtory/packtory.js";
|
|
21
|
+
import { createScheduler } from "packtory/packtory/scheduler.js";
|
|
22
|
+
import { readCiEnvironment } from "packtory/bundle-emitter/repository-coherence.js";
|
|
23
|
+
import { buildPackageProcessorComposition } from "packtory/packages/package-processor.composition.js";
|
|
15
24
|
async function importModule(modulePath) {
|
|
16
25
|
return import(__rewriteRelativeImportExtension(modulePath));
|
|
17
26
|
}
|
|
27
|
+
const spinnerRenderer = createTerminalSpinnerRenderer({
|
|
28
|
+
backend: createWorkerSpinnerBackend({ runtime: bootedSpinnerRuntime })
|
|
29
|
+
});
|
|
30
|
+
const clock = createClock();
|
|
31
|
+
const promptForOneTimePassword = createOneTimePasswordPrompt({
|
|
32
|
+
clock,
|
|
33
|
+
isInteractiveTerminal: () => {
|
|
34
|
+
return process.stdin.isTTY && process.stdout.isTTY;
|
|
35
|
+
},
|
|
36
|
+
stopSpinner: () => {
|
|
37
|
+
spinnerRenderer.stopAll();
|
|
38
|
+
},
|
|
39
|
+
createInterface: () => {
|
|
40
|
+
return readline.createInterface({
|
|
41
|
+
input: process.stdin,
|
|
42
|
+
output: process.stdout
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const { packageProcessor, progressBroadcaster, deadCodeEliminator } = buildPackageProcessorComposition({
|
|
47
|
+
promptForOneTimePassword,
|
|
48
|
+
ciEnvironment: readCiEnvironment(process.env)
|
|
49
|
+
});
|
|
50
|
+
const scheduler = createScheduler({
|
|
51
|
+
progressBroadcastProvider: progressBroadcaster.provider
|
|
52
|
+
});
|
|
53
|
+
const packtory = createPacktory({
|
|
54
|
+
scheduler,
|
|
55
|
+
packageProcessor,
|
|
56
|
+
deadCodeEliminator,
|
|
57
|
+
progressBroadcaster
|
|
58
|
+
});
|
|
18
59
|
const commandLinerInterfaceRunner = createCommandLineInterfaceRunner({
|
|
19
|
-
packtory
|
|
20
|
-
progressBroadcaster:
|
|
21
|
-
spinnerRenderer
|
|
60
|
+
packtory,
|
|
61
|
+
progressBroadcaster: progressBroadcaster.consumer,
|
|
62
|
+
spinnerRenderer,
|
|
22
63
|
configLoader: createConfigLoader({ currentWorkingDirectory: process.cwd(), importModule }),
|
|
64
|
+
writeReportFile: async (filePath, content) => {
|
|
65
|
+
await fs.writeFile(filePath, content);
|
|
66
|
+
},
|
|
67
|
+
pageOutput: async (content) => {
|
|
68
|
+
const didPage = await previewIo.pagePreviewOutput(content);
|
|
69
|
+
if (!didPage) {
|
|
70
|
+
console.log(content);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
openFile: previewIo.openPreviewFile,
|
|
74
|
+
createTemporaryFilePath: previewIo.createTemporaryPreviewHtmlPath,
|
|
23
75
|
log: console.log
|
|
24
76
|
});
|
|
77
|
+
function setExitCode(exitCode) {
|
|
78
|
+
process.exitCode = exitCode;
|
|
79
|
+
}
|
|
25
80
|
async function main() {
|
|
26
81
|
const exitCode = await commandLinerInterfaceRunner.run(process.argv);
|
|
27
|
-
|
|
28
|
-
process.exitCode = exitCode;
|
|
82
|
+
setExitCode(exitCode);
|
|
29
83
|
}
|
|
30
84
|
function crash(error) {
|
|
31
85
|
console.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-line-interface.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/command-line-interface/command-line-interface.entry-point.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"command-line-interface.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/command-line-interface/command-line-interface.entry-point.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { Worker as WorkerThread } from 'node:worker_threads';
|
|
4
|
+
import { bootSpinnerRuntime } from "../../command-line-interface/spinner-boot.js";
|
|
5
|
+
const bootModulePath = fileURLToPath(import.meta.url);
|
|
6
|
+
const bootModuleExtension = path.extname(bootModulePath);
|
|
7
|
+
const workerModulePath = path.join(path.dirname(bootModulePath), `spinner-worker.entry-point${bootModuleExtension}`);
|
|
8
|
+
const workerExecArgv = bootModuleExtension === '.ts' ? ['--experimental-strip-types', '--enable-source-maps'] : ['--enable-source-maps'];
|
|
9
|
+
function spawnWorker(request) {
|
|
10
|
+
const worker = new WorkerThread(workerModulePath, {
|
|
11
|
+
workerData: {
|
|
12
|
+
buffer: request.buffer,
|
|
13
|
+
slotCount: request.slotCount,
|
|
14
|
+
stdoutFileDescriptor: request.stdoutFileDescriptor
|
|
15
|
+
},
|
|
16
|
+
execArgv: workerExecArgv
|
|
17
|
+
});
|
|
18
|
+
worker.unref();
|
|
19
|
+
}
|
|
20
|
+
export const bootedSpinnerRuntime = bootSpinnerRuntime({
|
|
21
|
+
spawnWorker,
|
|
22
|
+
initialLabel: 'packtory',
|
|
23
|
+
initialMessage: 'Starting …'
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=spinner-boot.entry-point.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner-boot.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/command-line-interface/spinner-boot.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAGlF,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,6BAA6B,mBAAmB,EAAE,CAAC,CAAC;AACrH,MAAM,cAAc,GAChB,mBAAmB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAEtH,SAAS,WAAW,CAAC,OAA2B;IAC5C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,gBAAgB,EAAE;QAC9C,UAAU,EAAE;YACR,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACrD;QACD,QAAQ,EAAE,cAAc;KAC3B,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAmB,kBAAkB,CAAC;IACnE,WAAW;IACX,YAAY,EAAE,UAAU;IACxB,cAAc,EAAE,YAAY;CAC/B,CAAC,CAAC"}
|