@yugoo-design/dsh-design-studio 0.1.0 → 0.2.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/lib/node.d.ts ADDED
@@ -0,0 +1,400 @@
1
+ import { D as DesignBundleVersionPin, O as DesignKitVersionPin, a as StudioInstanceFileChange, f as StudioPanelDraftRepository, i as StudioInstanceChangeRequest, l as StudioDraftSources, m as StudioSourceSnapshot, n as StudioInstanceCandidate, r as StudioInstanceChangeReceipt, s as StudioInstanceSaveChanges, v as StudioContentArchive, w as StudioPanelPreviewResult } from "./instance-changes-CFLBPBdi.js";
2
+ //#region src/node/types.d.ts
3
+ type StudioAwaitable<T> = T | Promise<T>;
4
+ interface StudioSourceEntry {
5
+ readonly path: string;
6
+ readonly base64: string;
7
+ }
8
+ interface StudioDisplayTitle {
9
+ readonly zh: string;
10
+ readonly en: string;
11
+ }
12
+ interface StudioRetainedSource {
13
+ readonly snapshot: string;
14
+ readonly sourceId: string;
15
+ }
16
+ interface StudioInstalledKitCapture {
17
+ readonly name: string;
18
+ readonly version: string | number;
19
+ readonly sourceRoot?: string;
20
+ readonly skills?: readonly {
21
+ readonly name: string;
22
+ readonly version: string | number;
23
+ readonly catalogName?: string;
24
+ readonly resourceRoot?: string;
25
+ }[];
26
+ }
27
+ interface StudioNodeStorageOptions {
28
+ /** Trusted Host adapter; defaults to the cross-platform system trash implementation. */
29
+ readonly moveToTrash?: (file: string) => Promise<void>;
30
+ /** Absolute, host-selected state directory; never an installed source root. */
31
+ readonly stateRoot: string;
32
+ readonly kitRoot?: string;
33
+ readonly readInstalledKit?: () => StudioAwaitable<StudioInstalledKitCapture>;
34
+ readonly readInstalledBundle?: (pin: DesignBundleVersionPin) => StudioAwaitable<{
35
+ readonly resourceRoot?: string;
36
+ readonly sourceId?: string;
37
+ } | undefined>;
38
+ }
39
+ interface StudioInstalledStorageOptions extends StudioNodeStorageOptions {
40
+ readonly kitRoot: string;
41
+ readonly readInstalledKit: () => StudioAwaitable<StudioInstalledKitCapture>;
42
+ }
43
+ type StudioNodeDraftSources = StudioDraftSources;
44
+ interface StudioPanelDraftPorts {
45
+ readonly repository: StudioPanelDraftRepository;
46
+ readonly sources: StudioNodeDraftSources;
47
+ }
48
+ interface StudioInstanceMount {
49
+ readonly bindingKey?: string;
50
+ readonly bundle: DesignBundleVersionPin & {
51
+ readonly source?: StudioRetainedSource;
52
+ readonly instanceId?: string;
53
+ readonly revision?: number;
54
+ };
55
+ /** Retained legacy record fields, consumed only by explicit migration. */
56
+ readonly instanceId?: string;
57
+ readonly revision?: number;
58
+ }
59
+ interface StudioInstanceStoredRecord {
60
+ readonly id: string;
61
+ readonly revision: number;
62
+ readonly recordVersion?: 1 | 2;
63
+ readonly kind: 'kit' | 'bundle';
64
+ readonly title: StudioDisplayTitle;
65
+ readonly source: {
66
+ readonly kit?: DesignKitVersionPin;
67
+ readonly bundle?: DesignBundleVersionPin;
68
+ };
69
+ readonly kit?: DesignKitVersionPin;
70
+ readonly bundle?: DesignBundleVersionPin;
71
+ readonly runtimeName?: string;
72
+ readonly sourceId?: string;
73
+ readonly baseSnapshot: string;
74
+ readonly overlays: Readonly<Record<string, string>>;
75
+ readonly mounts: readonly StudioInstanceMount[];
76
+ readonly current?: boolean;
77
+ /** Provenance of an unfinished source authoring template; not definition validity. */
78
+ readonly createdBlank?: boolean;
79
+ /** Original imported bytes retained by the existing S2 snapshot store. */
80
+ readonly importedFromSnapshot?: string;
81
+ readonly createdAt?: string;
82
+ readonly deletedAt?: string;
83
+ readonly bundlePath?: string;
84
+ readonly forkedFrom?: {
85
+ readonly id: string;
86
+ readonly revision: number;
87
+ readonly pin: DesignBundleVersionPin | DesignKitVersionPin;
88
+ };
89
+ readonly migration?: {
90
+ readonly fromRevision: number;
91
+ readonly fromSnapshot: string;
92
+ };
93
+ }
94
+ type StudioInstanceContent = Omit<StudioInstanceStoredRecord, 'id' | 'revision'>;
95
+ interface StudioInstanceTransaction {
96
+ read(id: string): Promise<StudioInstanceStoredRecord>;
97
+ list(): Promise<readonly StudioInstanceStoredRecord[]>;
98
+ create(content: StudioInstanceContent): Promise<StudioInstanceStoredRecord>;
99
+ replace(id: string, expectedRevision: number, content: StudioInstanceContent): Promise<StudioInstanceStoredRecord>;
100
+ retainTree(entries: readonly StudioSourceEntry[]): Promise<StudioSourceSnapshot>;
101
+ migrate(id: string, expectedRevision: number, content: StudioInstanceContent): Promise<StudioInstanceStoredRecord>;
102
+ }
103
+ interface StudioInstanceRepository extends Omit<StudioInstanceTransaction, 'retainTree' | 'migrate'> {
104
+ /** Existing exclusive lock, not a multi-record rollback or publication transaction. */
105
+ transaction<T>(operation: (transaction: StudioInstanceTransaction) => Promise<T>): Promise<T>;
106
+ }
107
+ interface StudioInstanceDraftPorts {
108
+ readonly repository: StudioInstanceRepository;
109
+ readonly sources: StudioNodeDraftSources & {
110
+ retainTree(entries: readonly StudioSourceEntry[]): Promise<StudioSourceSnapshot>;
111
+ };
112
+ }
113
+ interface StudioInstanceBundleChoice extends DesignBundleVersionPin {
114
+ readonly title: StudioDisplayTitle;
115
+ readonly runtimeName: string;
116
+ /** Read-only picker copy from the existing Bundle source; never a mount pin. */
117
+ readonly description?: string;
118
+ readonly displayDescription?: StudioDisplayTitle;
119
+ readonly instanceId?: string;
120
+ readonly revision?: number;
121
+ }
122
+ interface StudioInstanceDescription extends Omit<StudioInstanceStoredRecord, 'overlays' | 'importedFromSnapshot'> {
123
+ /** Same-identity editable projection of a catalog source. */
124
+ readonly current?: boolean;
125
+ readonly refs: readonly {
126
+ readonly id: string;
127
+ readonly title: StudioDisplayTitle;
128
+ }[];
129
+ readonly readiness?: {
130
+ readonly ready: boolean;
131
+ readonly diagnostics: readonly {
132
+ readonly code: string;
133
+ readonly message: string;
134
+ readonly path?: string;
135
+ readonly severity?: 'error' | 'warning';
136
+ }[];
137
+ };
138
+ readonly requiresMigration?: boolean;
139
+ readonly description?: string;
140
+ readonly displayDescription?: StudioDisplayTitle;
141
+ readonly files?: readonly {
142
+ readonly path: string;
143
+ readonly bytes: number;
144
+ readonly editable: boolean;
145
+ }[];
146
+ readonly availableBundles?: readonly StudioInstanceBundleChoice[];
147
+ }
148
+ interface StudioBundleCapture {
149
+ readonly files: readonly StudioSourceEntry[];
150
+ readonly sourceId: string;
151
+ }
152
+ type StudioBundleResolver = (pin: DesignBundleVersionPin) => StudioAwaitable<StudioBundleCapture | undefined>;
153
+ interface StudioKitCompositionInput {
154
+ readonly kit: DesignKitVersionPin;
155
+ readonly kitFiles: readonly StudioSourceEntry[];
156
+ readonly mounts: readonly StudioInstanceMount[];
157
+ readonly resolveBundle: StudioBundleResolver;
158
+ }
159
+ type StudioInstancePreviewInput = ({
160
+ readonly kind: 'kit';
161
+ } & StudioKitCompositionInput | {
162
+ readonly kind: 'bundle';
163
+ readonly bundleFiles: readonly StudioSourceEntry[];
164
+ readonly runtimeName?: string;
165
+ readonly sourceId: string;
166
+ }) & {
167
+ readonly bundle: DesignBundleVersionPin;
168
+ readonly revision: number;
169
+ readonly sampleSource?: string;
170
+ };
171
+ interface StudioInstanceCatalog {
172
+ listBundles(): Promise<readonly StudioInstanceBundleChoice[]>;
173
+ captureBundle(pin: DesignBundleVersionPin): Promise<StudioBundleCapture & Pick<StudioInstanceBundleChoice, 'title' | 'runtimeName' | 'description' | 'displayDescription'>>;
174
+ captureKit(pin: DesignKitVersionPin): Promise<{
175
+ readonly files: readonly StudioSourceEntry[];
176
+ readonly title?: StudioDisplayTitle;
177
+ readonly mounts: readonly (DesignBundleVersionPin & {
178
+ readonly bindingKey: string;
179
+ })[];
180
+ }>;
181
+ }
182
+ interface StudioInstanceComposition {
183
+ loadKit?(input: StudioKitCompositionInput): Promise<import("@yugoo-design/dsh-design-core").DesignKit>;
184
+ forkBundle(input: {
185
+ readonly files: readonly StudioSourceEntry[];
186
+ readonly from: DesignBundleVersionPin;
187
+ readonly to: DesignBundleVersionPin;
188
+ readonly runtimeName: string;
189
+ }): Promise<readonly StudioSourceEntry[]>;
190
+ /** Draft projection is allowed for Node-owned blank sources and still-incomplete imported Kits. */
191
+ projectMounts(input: {
192
+ readonly allowEmptyDraft?: boolean;
193
+ readonly kit: DesignKitVersionPin;
194
+ readonly kitFiles: readonly StudioSourceEntry[];
195
+ readonly mounts: readonly (DesignBundleVersionPin & {
196
+ readonly bindingKey: string;
197
+ })[];
198
+ readonly resolveBundle?: StudioBundleResolver;
199
+ }): Promise<readonly StudioSourceEntry[]>;
200
+ /** Partial source import; identity projection does not validate or grant execution. */
201
+ projectSourceIdentity?(input: {
202
+ readonly kind: 'kit' | 'bundle';
203
+ readonly files: readonly StudioSourceEntry[];
204
+ readonly identity: DesignBundleVersionPin | DesignKitVersionPin;
205
+ }): StudioAwaitable<readonly StudioSourceEntry[]>;
206
+ validateBundle?(input: {
207
+ readonly bundle: DesignBundleVersionPin;
208
+ readonly bundleFiles: readonly StudioSourceEntry[];
209
+ readonly sourceId: string;
210
+ readonly runtimeName: string;
211
+ }): Promise<void>;
212
+ validateKit(input: StudioKitCompositionInput): Promise<void>;
213
+ preview?(input: StudioInstancePreviewInput): Promise<StudioPanelPreviewResult>;
214
+ }
215
+ interface StudioInstanceTrustedCaptures {
216
+ listBundles(): StudioAwaitable<readonly DesignBundleVersionPin[]>;
217
+ captureBundle(pin: DesignBundleVersionPin): StudioAwaitable<StudioBundleCapture>;
218
+ captureKit(pin: DesignKitVersionPin): StudioAwaitable<{
219
+ readonly files: readonly StudioSourceEntry[];
220
+ readonly title?: StudioDisplayTitle;
221
+ }>;
222
+ preview?(input: StudioInstancePreviewInput): StudioAwaitable<StudioPanelPreviewResult>;
223
+ }
224
+ interface StudioInstanceAdapters {
225
+ readonly catalog: StudioInstanceCatalog;
226
+ readonly composition: StudioInstanceComposition;
227
+ }
228
+ interface StudioInstancesOptions extends StudioNodeStorageOptions, StudioInstanceAdapters {}
229
+ interface StudioInstanceArchiveRequest {
230
+ readonly id: string;
231
+ readonly expectedRevision: number;
232
+ readonly provenance?: StudioContentArchive['provenance'];
233
+ readonly dependencies?: readonly DesignBundleVersionPin[];
234
+ }
235
+ interface StudioInstanceCopyRequest {
236
+ readonly kind: 'kit' | 'bundle';
237
+ readonly kit?: DesignKitVersionPin;
238
+ readonly bundle?: DesignBundleVersionPin;
239
+ readonly sourceId?: string;
240
+ readonly expectedRevision?: number;
241
+ readonly title?: StudioDisplayTitle;
242
+ }
243
+ interface StudioInstanceRevision {
244
+ readonly id: string;
245
+ readonly expectedRevision: number;
246
+ }
247
+ interface StudioInstanceReadFile {
248
+ readonly id: string;
249
+ readonly revision: number;
250
+ readonly path: string;
251
+ readonly content: string;
252
+ }
253
+ interface StudioInstanceImportRequest {
254
+ readonly kind: 'kit' | 'bundle';
255
+ readonly files: readonly StudioSourceEntry[];
256
+ readonly title?: StudioDisplayTitle;
257
+ }
258
+ interface StudioInstances {
259
+ editCurrent(input: {
260
+ readonly kind: 'kit' | 'bundle';
261
+ readonly kit?: DesignKitVersionPin;
262
+ readonly bundle?: DesignBundleVersionPin;
263
+ }): Promise<StudioInstanceDescription>;
264
+ captureKit(input: {
265
+ readonly id: string;
266
+ readonly expectedRevision?: number;
267
+ }): Promise<StudioKitCompositionInput>;
268
+ loadKit(input: {
269
+ readonly id: string;
270
+ readonly expectedRevision?: number;
271
+ }): Promise<import("@yugoo-design/dsh-design-core").DesignKit>;
272
+ importSources(input: StudioInstanceImportRequest): Promise<StudioInstanceDescription>;
273
+ create(input: {
274
+ readonly kind: 'kit' | 'bundle';
275
+ readonly title: StudioDisplayTitle;
276
+ }): Promise<StudioInstanceDescription>;
277
+ read(input: string | {
278
+ readonly id: string;
279
+ }): Promise<StudioInstanceDescription>;
280
+ list(input?: {
281
+ readonly kind?: 'kit' | 'bundle';
282
+ }): Promise<readonly StudioInstanceDescription[]>;
283
+ listBundles(): Promise<readonly StudioInstanceBundleChoice[]>;
284
+ copy(input: StudioInstanceCopyRequest): Promise<StudioInstanceDescription>;
285
+ rename(input: StudioInstanceRevision & {
286
+ readonly title: StudioDisplayTitle;
287
+ }): Promise<StudioInstanceDescription>;
288
+ remove(input: StudioInstanceRevision): Promise<{
289
+ readonly id: string;
290
+ readonly revision: number;
291
+ readonly trashed: true;
292
+ }>;
293
+ readFile(input: {
294
+ readonly id: string;
295
+ readonly path: string;
296
+ }): Promise<StudioInstanceReadFile>;
297
+ saveFile(input: StudioInstanceRevision & {
298
+ readonly path: string;
299
+ readonly content: string;
300
+ }): Promise<StudioInstanceDescription>;
301
+ exportArchive(input: StudioInstanceArchiveRequest): Promise<string>;
302
+ prepareChanges(input: StudioInstanceChangeRequest): Promise<StudioInstanceCandidate>;
303
+ saveChanges(input: StudioInstanceSaveChanges): Promise<StudioInstanceDescription & {
304
+ readonly changeReceipt: StudioInstanceChangeReceipt;
305
+ }>;
306
+ updateMounts(input: StudioInstanceRevision & {
307
+ readonly bundles: readonly (DesignBundleVersionPin & {
308
+ readonly bindingKey?: string;
309
+ readonly instanceId?: string;
310
+ readonly revision?: number;
311
+ })[];
312
+ }): Promise<StudioInstanceDescription>;
313
+ preview(input: StudioInstanceRevision & {
314
+ readonly bundle?: DesignBundleVersionPin;
315
+ readonly sampleSource?: string;
316
+ }): Promise<StudioPanelPreviewResult>;
317
+ migrate(input: StudioInstanceRevision): Promise<StudioInstanceDescription>;
318
+ }
319
+ interface StudioAuthoringScope extends StudioInstanceRevision {
320
+ readonly allowedPaths: readonly string[];
321
+ readonly bundle?: DesignBundleVersionPin;
322
+ }
323
+ interface StudioAuthoringComponentCatalog {
324
+ readonly components: readonly {
325
+ readonly name: string;
326
+ readonly [key: string]: unknown;
327
+ }[];
328
+ readonly [key: string]: unknown;
329
+ }
330
+ interface StudioAuthoringRecord {
331
+ readonly id: string;
332
+ readonly revision: number;
333
+ readonly kind: 'kit' | 'bundle';
334
+ readonly deletedAt?: string;
335
+ readonly bundle?: DesignBundleVersionPin;
336
+ readonly files?: readonly {
337
+ readonly path: string;
338
+ readonly bytes: number;
339
+ readonly editable: boolean;
340
+ }[];
341
+ readonly mounts?: readonly {
342
+ readonly bundle: DesignBundleVersionPin;
343
+ }[];
344
+ }
345
+ interface StudioAuthoringOptions {
346
+ readonly scope: StudioAuthoringScope;
347
+ readonly instances: {
348
+ read(input: {
349
+ readonly id: string;
350
+ }): Promise<StudioAuthoringRecord>;
351
+ readFile(input: {
352
+ readonly id: string;
353
+ readonly path: string;
354
+ }): Promise<StudioInstanceReadFile>;
355
+ prepareChanges(input: StudioInstanceChangeRequest): Promise<StudioInstanceCandidate>;
356
+ };
357
+ readonly readComponents: () => StudioAwaitable<StudioAuthoringComponentCatalog>;
358
+ }
359
+ type StudioAuthoringReplacement = StudioInstanceFileChange & {
360
+ readonly content: string;
361
+ };
362
+ interface StudioAuthoring {
363
+ read(input?: {
364
+ readonly paths?: readonly string[];
365
+ }): Promise<{
366
+ readonly scope: StudioAuthoringScope;
367
+ readonly files: readonly ({
368
+ readonly path: string;
369
+ readonly exists: false;
370
+ } | {
371
+ readonly path: string;
372
+ readonly exists: true;
373
+ readonly content: string;
374
+ })[];
375
+ readonly components: StudioAuthoringComponentCatalog;
376
+ }>;
377
+ prepare(input: {
378
+ readonly changes: readonly StudioAuthoringReplacement[];
379
+ }): Promise<{
380
+ readonly scope: StudioAuthoringScope;
381
+ readonly components: StudioAuthoringComponentCatalog;
382
+ readonly request: StudioInstanceChangeRequest;
383
+ readonly candidate: StudioInstanceCandidate;
384
+ }>;
385
+ }
386
+ //#endregion
387
+ //#region src/node/studio-panel-drafts.d.mts
388
+ declare function createStudioDraftPorts(options: StudioInstalledStorageOptions, kind: 'panel'): Promise<StudioPanelDraftPorts>;
389
+ declare function createStudioDraftPorts(options: StudioNodeStorageOptions, kind: 'instance'): Promise<StudioInstanceDraftPorts>;
390
+ //#endregion
391
+ //#region src/node/studio-instances.d.mts
392
+ declare function createStudioInstances(options: StudioInstancesOptions): Promise<StudioInstances>;
393
+ //#endregion
394
+ //#region src/node/studio-instance-composition.d.mts
395
+ declare function createStudioInstanceAdapters(trusted: StudioInstanceTrustedCaptures): StudioInstanceAdapters;
396
+ //#endregion
397
+ //#region src/node/studio-authoring.d.mts
398
+ declare function createStudioAuthoring(options: StudioAuthoringOptions): StudioAuthoring;
399
+ //#endregion
400
+ export { type StudioAuthoring, type StudioAuthoringComponentCatalog, type StudioAuthoringOptions, type StudioAuthoringRecord, type StudioAuthoringReplacement, type StudioAuthoringScope, type StudioAwaitable, type StudioBundleCapture, type StudioBundleResolver, type StudioDisplayTitle, type StudioInstalledKitCapture, type StudioInstalledStorageOptions, type StudioInstanceAdapters, type StudioInstanceArchiveRequest, type StudioInstanceBundleChoice, type StudioInstanceCatalog, type StudioInstanceComposition, type StudioInstanceContent, type StudioInstanceCopyRequest, type StudioInstanceDescription, type StudioInstanceDraftPorts, type StudioInstanceImportRequest, type StudioInstanceMount, type StudioInstancePreviewInput, type StudioInstanceReadFile, type StudioInstanceRepository, type StudioInstanceRevision, type StudioInstanceStoredRecord, type StudioInstanceTransaction, type StudioInstanceTrustedCaptures, type StudioInstances, type StudioInstancesOptions, type StudioKitCompositionInput, type StudioNodeDraftSources, type StudioNodeStorageOptions, type StudioPanelDraftPorts, type StudioRetainedSource, type StudioSourceEntry, createStudioAuthoring, createStudioDraftPorts, createStudioInstanceAdapters, createStudioInstances };