dataiku-sdk 0.6.1 → 0.6.2
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/packages/types/src/index.d.ts +21 -0
- package/dist/packages/types/src/index.js +7 -0
- package/dist/src/cli.js +437 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/resources/datasets.js +23 -1
- package/dist/src/resources/flow-zones.d.ts +1 -1
- package/dist/src/resources/flow-zones.js +3 -1
- package/dist/src/resources/recipes.d.ts +1 -0
- package/dist/src/resources/recipes.js +26 -2
- package/dist/src/schemas.d.ts +2 -2
- package/dist/src/schemas.js +1 -1
- package/package.json +1 -1
- package/packages/types/dist/index.d.ts +21 -0
- package/packages/types/dist/index.js +7 -0
|
@@ -282,6 +282,11 @@ export declare const FlowZoneItemSchema: import("@sinclair/typebox").TObject<{
|
|
|
282
282
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
283
283
|
}>;
|
|
284
284
|
export type FlowZoneItem = Static<typeof FlowZoneItemSchema>;
|
|
285
|
+
export declare const FlowZonePositionSchema: import("@sinclair/typebox").TObject<{
|
|
286
|
+
x: import("@sinclair/typebox").TNumber;
|
|
287
|
+
y: import("@sinclair/typebox").TNumber;
|
|
288
|
+
}>;
|
|
289
|
+
export type FlowZonePosition = Static<typeof FlowZonePositionSchema>;
|
|
285
290
|
export declare const FlowZoneSchema: import("@sinclair/typebox").TObject<{
|
|
286
291
|
id: import("@sinclair/typebox").TString;
|
|
287
292
|
name: import("@sinclair/typebox").TString;
|
|
@@ -297,6 +302,10 @@ export declare const FlowZoneSchema: import("@sinclair/typebox").TObject<{
|
|
|
297
302
|
objectType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"DATASET">, import("@sinclair/typebox").TLiteral<"MANAGED_FOLDER">, import("@sinclair/typebox").TLiteral<"SAVED_MODEL">, import("@sinclair/typebox").TLiteral<"RECIPE">, import("@sinclair/typebox").TLiteral<"MODEL_EVALUATION_STORE">, import("@sinclair/typebox").TLiteral<"STREAMING_ENDPOINT">, import("@sinclair/typebox").TLiteral<"LABELING_TASK">, import("@sinclair/typebox").TLiteral<"RETRIEVABLE_KNOWLEDGE">]>;
|
|
298
303
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
299
304
|
}>>>;
|
|
305
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
306
|
+
x: import("@sinclair/typebox").TNumber;
|
|
307
|
+
y: import("@sinclair/typebox").TNumber;
|
|
308
|
+
}>>;
|
|
300
309
|
}>;
|
|
301
310
|
export type FlowZone = Static<typeof FlowZoneSchema>;
|
|
302
311
|
export declare const FlowZoneArraySchema: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
@@ -314,17 +323,29 @@ export declare const FlowZoneArraySchema: import("@sinclair/typebox").TArray<imp
|
|
|
314
323
|
objectType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"DATASET">, import("@sinclair/typebox").TLiteral<"MANAGED_FOLDER">, import("@sinclair/typebox").TLiteral<"SAVED_MODEL">, import("@sinclair/typebox").TLiteral<"RECIPE">, import("@sinclair/typebox").TLiteral<"MODEL_EVALUATION_STORE">, import("@sinclair/typebox").TLiteral<"STREAMING_ENDPOINT">, import("@sinclair/typebox").TLiteral<"LABELING_TASK">, import("@sinclair/typebox").TLiteral<"RETRIEVABLE_KNOWLEDGE">]>;
|
|
315
324
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
316
325
|
}>>>;
|
|
326
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
327
|
+
x: import("@sinclair/typebox").TNumber;
|
|
328
|
+
y: import("@sinclair/typebox").TNumber;
|
|
329
|
+
}>>;
|
|
317
330
|
}>>;
|
|
318
331
|
export declare const FlowZoneCreateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
319
332
|
name: import("@sinclair/typebox").TString;
|
|
320
333
|
color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
321
334
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
335
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
336
|
+
x: import("@sinclair/typebox").TNumber;
|
|
337
|
+
y: import("@sinclair/typebox").TNumber;
|
|
338
|
+
}>>;
|
|
322
339
|
}>;
|
|
323
340
|
export type FlowZoneCreateOptions = Static<typeof FlowZoneCreateOptionsSchema>;
|
|
324
341
|
export declare const FlowZoneUpdateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
325
342
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
326
343
|
color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
327
344
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
345
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
346
|
+
x: import("@sinclair/typebox").TNumber;
|
|
347
|
+
y: import("@sinclair/typebox").TNumber;
|
|
348
|
+
}>>;
|
|
328
349
|
}>;
|
|
329
350
|
export type FlowZoneUpdateOptions = Static<typeof FlowZoneUpdateOptionsSchema>;
|
|
330
351
|
export declare const FolderCreateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
@@ -340,6 +340,10 @@ export const FlowZoneItemSchema = Type.Object({
|
|
|
340
340
|
objectType: FlowZoneObjectTypeSchema,
|
|
341
341
|
projectKey: Type.Optional(Type.String()),
|
|
342
342
|
}, { additionalProperties: true, });
|
|
343
|
+
export const FlowZonePositionSchema = Type.Object({
|
|
344
|
+
x: Type.Number(),
|
|
345
|
+
y: Type.Number(),
|
|
346
|
+
}, { additionalProperties: false, });
|
|
343
347
|
export const FlowZoneSchema = Type.Object({
|
|
344
348
|
id: Type.String(),
|
|
345
349
|
name: Type.String(),
|
|
@@ -347,17 +351,20 @@ export const FlowZoneSchema = Type.Object({
|
|
|
347
351
|
projectKey: Type.Optional(Type.String()),
|
|
348
352
|
items: Type.Optional(Type.Array(FlowZoneItemSchema)),
|
|
349
353
|
shared: Type.Optional(Type.Array(FlowZoneItemSchema)),
|
|
354
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
350
355
|
}, { additionalProperties: true, });
|
|
351
356
|
export const FlowZoneArraySchema = Type.Array(FlowZoneSchema);
|
|
352
357
|
export const FlowZoneCreateOptionsSchema = Type.Object({
|
|
353
358
|
name: Type.String(),
|
|
354
359
|
color: Type.Optional(Type.String()),
|
|
355
360
|
projectKey: Type.Optional(Type.String()),
|
|
361
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
356
362
|
}, { additionalProperties: false, });
|
|
357
363
|
export const FlowZoneUpdateOptionsSchema = Type.Object({
|
|
358
364
|
name: Type.Optional(Type.String()),
|
|
359
365
|
color: Type.Optional(Type.String()),
|
|
360
366
|
projectKey: Type.Optional(Type.String()),
|
|
367
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
361
368
|
}, { additionalProperties: false, });
|
|
362
369
|
// ---------------------------------------------------------------------------
|
|
363
370
|
// Folders
|
package/dist/src/cli.js
CHANGED
|
@@ -340,6 +340,336 @@ function flowZoneDetailSummary(zone) {
|
|
|
340
340
|
items: flowZoneItems(zone),
|
|
341
341
|
};
|
|
342
342
|
}
|
|
343
|
+
function optionalStringField(record, keys) {
|
|
344
|
+
for (const key of keys) {
|
|
345
|
+
const value = record[key];
|
|
346
|
+
if (typeof value === "string" && value.trim().length > 0)
|
|
347
|
+
return value.trim();
|
|
348
|
+
}
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
function requiredStringArray(value, source) {
|
|
352
|
+
if (!Array.isArray(value)) {
|
|
353
|
+
throw new UsageError(`${source} must be an array of strings.`, "validation_failed");
|
|
354
|
+
}
|
|
355
|
+
return value.map((item, index) => {
|
|
356
|
+
if (typeof item !== "string" || item.trim().length === 0) {
|
|
357
|
+
throw new UsageError(`${source}[${index}] must be a non-empty string.`, "validation_failed");
|
|
358
|
+
}
|
|
359
|
+
return item.trim();
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
function finiteNumberField(record, key, source) {
|
|
363
|
+
const value = record[key];
|
|
364
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
365
|
+
throw new UsageError(`${source}.${key} must be a finite number.`, "validation_failed");
|
|
366
|
+
}
|
|
367
|
+
return value;
|
|
368
|
+
}
|
|
369
|
+
function flowZonePlanColor(value, source) {
|
|
370
|
+
if (value === undefined)
|
|
371
|
+
return undefined;
|
|
372
|
+
if (typeof value !== "string" || !/^#[0-9a-fA-F]{6}$/.test(value.trim())) {
|
|
373
|
+
throw new UsageError(`${source} must be a hex color like #2ab1ac.`, "validation_failed");
|
|
374
|
+
}
|
|
375
|
+
return value.trim();
|
|
376
|
+
}
|
|
377
|
+
function flowZonePlanPosition(value, source) {
|
|
378
|
+
if (value === undefined)
|
|
379
|
+
return undefined;
|
|
380
|
+
const record = plainRecord(value);
|
|
381
|
+
if (!record) {
|
|
382
|
+
throw new UsageError(`${source} must be an object with x and y.`, "validation_failed");
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
x: finiteNumberField(record, "x", source),
|
|
386
|
+
y: finiteNumberField(record, "y", source),
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
function flowZoneCurrentPosition(zone) {
|
|
390
|
+
const record = zone;
|
|
391
|
+
const position = plainRecord(record.position);
|
|
392
|
+
if (!position)
|
|
393
|
+
return undefined;
|
|
394
|
+
const x = position.x;
|
|
395
|
+
const y = position.y;
|
|
396
|
+
return typeof x === "number" && Number.isFinite(x) && typeof y === "number" && Number.isFinite(y)
|
|
397
|
+
? { x, y, }
|
|
398
|
+
: undefined;
|
|
399
|
+
}
|
|
400
|
+
function flowZoneSamePosition(a, b) {
|
|
401
|
+
if (a === undefined || b === undefined)
|
|
402
|
+
return a === b;
|
|
403
|
+
return a.x === b.x && a.y === b.y;
|
|
404
|
+
}
|
|
405
|
+
function parseFlowZonePlanItem(value, source) {
|
|
406
|
+
if (typeof value === "string")
|
|
407
|
+
return parseFlowZoneObject(value);
|
|
408
|
+
const record = plainRecord(value);
|
|
409
|
+
if (!record) {
|
|
410
|
+
throw new UsageError(`${source} must be TYPE:ID or an object.`, "validation_failed");
|
|
411
|
+
}
|
|
412
|
+
const object = optionalStringField(record, ["object",]);
|
|
413
|
+
if (object)
|
|
414
|
+
return parseFlowZoneObject(object);
|
|
415
|
+
const objectType = optionalStringField(record, ["objectType", "type",]);
|
|
416
|
+
const objectId = optionalStringField(record, ["objectId", "id", "name",]);
|
|
417
|
+
if (!objectType || !objectId) {
|
|
418
|
+
throw new UsageError(`${source} must include objectType/type and objectId/id, or object as TYPE:ID.`, "validation_failed");
|
|
419
|
+
}
|
|
420
|
+
const projectKey = optionalStringField(record, ["projectKey", "project",]);
|
|
421
|
+
return {
|
|
422
|
+
objectType: flowZoneObjectType(objectType),
|
|
423
|
+
objectId,
|
|
424
|
+
...(projectKey ? { projectKey, } : {}),
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
function addFlowZonePlanTypedItems(items, record, key, objectType, source) {
|
|
428
|
+
if (record[key] === undefined)
|
|
429
|
+
return;
|
|
430
|
+
for (const objectId of requiredStringArray(record[key], `${source}.${key}`)) {
|
|
431
|
+
items.push({ objectType, objectId, });
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
function flowZoneItemKey(item) {
|
|
435
|
+
return `${item.projectKey ?? ""}\0${item.objectType}\0${item.objectId}`;
|
|
436
|
+
}
|
|
437
|
+
function flowZonePlanLabel(plan) {
|
|
438
|
+
return plan.id ?? plan.name ?? "<unknown>";
|
|
439
|
+
}
|
|
440
|
+
function dedupeFlowZonePlanItems(items) {
|
|
441
|
+
const seen = new Set();
|
|
442
|
+
const result = [];
|
|
443
|
+
for (const item of items) {
|
|
444
|
+
const key = flowZoneItemKey(item);
|
|
445
|
+
if (seen.has(key))
|
|
446
|
+
continue;
|
|
447
|
+
seen.add(key);
|
|
448
|
+
result.push(item);
|
|
449
|
+
}
|
|
450
|
+
return result;
|
|
451
|
+
}
|
|
452
|
+
function flowZonePlanItemKeys(plan) {
|
|
453
|
+
const keys = new Set();
|
|
454
|
+
for (const zone of plan.zones) {
|
|
455
|
+
for (const item of zone.items)
|
|
456
|
+
keys.add(flowZoneItemKey(item));
|
|
457
|
+
}
|
|
458
|
+
return keys;
|
|
459
|
+
}
|
|
460
|
+
function validateUniqueFlowZoneAssignments(plan) {
|
|
461
|
+
const seen = new Map();
|
|
462
|
+
for (const zone of plan.zones) {
|
|
463
|
+
const label = flowZonePlanLabel(zone);
|
|
464
|
+
for (const item of zone.items) {
|
|
465
|
+
const key = flowZoneItemKey(item);
|
|
466
|
+
const previous = seen.get(key);
|
|
467
|
+
if (previous) {
|
|
468
|
+
throw new UsageError(`Flow object ${item.objectType}:${item.objectId} is assigned to both "${previous}" and "${label}".`, "validation_failed");
|
|
469
|
+
}
|
|
470
|
+
seen.set(key, label);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
function parseFlowZoneOrganizePlan(input) {
|
|
475
|
+
const zones = input.zones;
|
|
476
|
+
if (!Array.isArray(zones) || zones.length === 0) {
|
|
477
|
+
throw new UsageError("Flow zone organize plan must include a non-empty zones array.", "validation_failed");
|
|
478
|
+
}
|
|
479
|
+
const plan = {
|
|
480
|
+
zones: zones.map((value, index) => {
|
|
481
|
+
const source = `zones[${index}]`;
|
|
482
|
+
const record = plainRecord(value);
|
|
483
|
+
if (!record)
|
|
484
|
+
throw new UsageError(`${source} must be an object.`, "validation_failed");
|
|
485
|
+
const id = optionalStringField(record, ["id", "zoneId",]);
|
|
486
|
+
const name = optionalStringField(record, ["name",]);
|
|
487
|
+
if (!id && !name) {
|
|
488
|
+
throw new UsageError(`${source} must include name or id.`, "validation_failed");
|
|
489
|
+
}
|
|
490
|
+
const items = [];
|
|
491
|
+
const rawItems = record.items ?? record.objects;
|
|
492
|
+
if (rawItems !== undefined) {
|
|
493
|
+
if (!Array.isArray(rawItems)) {
|
|
494
|
+
throw new UsageError(`${source}.items must be an array.`, "validation_failed");
|
|
495
|
+
}
|
|
496
|
+
rawItems.forEach((item, itemIndex) => {
|
|
497
|
+
items.push(parseFlowZonePlanItem(item, `${source}.items[${itemIndex}]`));
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
addFlowZonePlanTypedItems(items, record, "datasets", "DATASET", source);
|
|
501
|
+
addFlowZonePlanTypedItems(items, record, "recipes", "RECIPE", source);
|
|
502
|
+
addFlowZonePlanTypedItems(items, record, "folders", "MANAGED_FOLDER", source);
|
|
503
|
+
addFlowZonePlanTypedItems(items, record, "savedModels", "SAVED_MODEL", source);
|
|
504
|
+
addFlowZonePlanTypedItems(items, record, "modelEvaluationStores", "MODEL_EVALUATION_STORE", source);
|
|
505
|
+
addFlowZonePlanTypedItems(items, record, "streamingEndpoints", "STREAMING_ENDPOINT", source);
|
|
506
|
+
addFlowZonePlanTypedItems(items, record, "labelingTasks", "LABELING_TASK", source);
|
|
507
|
+
addFlowZonePlanTypedItems(items, record, "knowledgeBanks", "RETRIEVABLE_KNOWLEDGE", source);
|
|
508
|
+
return {
|
|
509
|
+
...(id ? { id, } : {}),
|
|
510
|
+
...(name ? { name, } : {}),
|
|
511
|
+
...(record.color !== undefined
|
|
512
|
+
? { color: flowZonePlanColor(record.color, `${source}.color`), }
|
|
513
|
+
: {}),
|
|
514
|
+
...(record.position !== undefined
|
|
515
|
+
? { position: flowZonePlanPosition(record.position, `${source}.position`), }
|
|
516
|
+
: {}),
|
|
517
|
+
items: dedupeFlowZonePlanItems(items),
|
|
518
|
+
};
|
|
519
|
+
}),
|
|
520
|
+
};
|
|
521
|
+
validateUniqueFlowZoneAssignments(plan);
|
|
522
|
+
return plan;
|
|
523
|
+
}
|
|
524
|
+
function readFlowZoneOrganizePlan(flags, usage) {
|
|
525
|
+
const data = typeof flags["file"] === "string"
|
|
526
|
+
? parseJsonObject(readFileSync(flags["file"], "utf-8"), flags["file"])
|
|
527
|
+
: jsonInput(flags);
|
|
528
|
+
if (!data) {
|
|
529
|
+
throw new UsageError(`--data, --data-file, --file, or --stdin is required. Usage: ${usage}`, "missing_required_flag");
|
|
530
|
+
}
|
|
531
|
+
return parseFlowZoneOrganizePlan(data);
|
|
532
|
+
}
|
|
533
|
+
function findFlowZoneForPlan(zones, plan) {
|
|
534
|
+
if (plan.id) {
|
|
535
|
+
const byId = zones.find((zone) => zone.id === plan.id);
|
|
536
|
+
if (byId)
|
|
537
|
+
return byId;
|
|
538
|
+
}
|
|
539
|
+
if (!plan.name)
|
|
540
|
+
return undefined;
|
|
541
|
+
const byName = zones.filter((zone) => zone.name === plan.name);
|
|
542
|
+
if (byName.length > 1) {
|
|
543
|
+
throw new UsageError(`Multiple flow zones named "${plan.name}" exist; use id.`, "validation_failed");
|
|
544
|
+
}
|
|
545
|
+
return byName[0];
|
|
546
|
+
}
|
|
547
|
+
function ensureFlowZonePlanTarget(plan, existing) {
|
|
548
|
+
if (existing || plan.name)
|
|
549
|
+
return;
|
|
550
|
+
throw new UsageError(`Flow zone ${plan.id ?? "<unknown>"} was not found and cannot be created without name.`, "validation_failed");
|
|
551
|
+
}
|
|
552
|
+
function flowZoneExplicitItems(zone) {
|
|
553
|
+
return (zone.items ?? []).map((item) => ({
|
|
554
|
+
objectId: item.objectId,
|
|
555
|
+
objectType: item.objectType,
|
|
556
|
+
...(item.projectKey ? { projectKey: item.projectKey, } : {}),
|
|
557
|
+
}));
|
|
558
|
+
}
|
|
559
|
+
function flowZonePruneItems(existing, plannedItemKeys) {
|
|
560
|
+
if (!existing)
|
|
561
|
+
return [];
|
|
562
|
+
return flowZoneExplicitItems(existing).filter((item) => !plannedItemKeys.has(flowZoneItemKey(item)));
|
|
563
|
+
}
|
|
564
|
+
function flowZoneOrganizeStep(plan, existing, sync, plannedItemKeys) {
|
|
565
|
+
ensureFlowZonePlanTarget(plan, existing);
|
|
566
|
+
const update = {};
|
|
567
|
+
if (existing && plan.name && plan.name !== existing.name)
|
|
568
|
+
update.name = plan.name;
|
|
569
|
+
if (existing && plan.color && plan.color !== existing.color)
|
|
570
|
+
update.color = plan.color;
|
|
571
|
+
if (existing && plan.position !== undefined
|
|
572
|
+
&& !flowZoneSamePosition(flowZoneCurrentPosition(existing), plan.position)) {
|
|
573
|
+
update.position = plan.position;
|
|
574
|
+
}
|
|
575
|
+
const pruneItems = sync ? flowZonePruneItems(existing, plannedItemKeys) : [];
|
|
576
|
+
return {
|
|
577
|
+
target: {
|
|
578
|
+
...(plan.id ? { id: plan.id, } : {}),
|
|
579
|
+
...(plan.name ? { name: plan.name, } : {}),
|
|
580
|
+
...(plan.color ? { color: plan.color, } : {}),
|
|
581
|
+
...(plan.position ? { position: plan.position, } : {}),
|
|
582
|
+
},
|
|
583
|
+
...(existing ? { existing: flowZoneSummary(existing), } : { create: true, }),
|
|
584
|
+
...(Object.keys(update).length > 0 ? { update, } : {}),
|
|
585
|
+
moveItems: plan.items,
|
|
586
|
+
...(pruneItems.length > 0 ? { pruneItems, } : {}),
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function flowZoneValidationBucket(index, objectType) {
|
|
590
|
+
switch (objectType) {
|
|
591
|
+
case "DATASET":
|
|
592
|
+
return index.datasets;
|
|
593
|
+
case "RECIPE":
|
|
594
|
+
return index.recipes;
|
|
595
|
+
case "MANAGED_FOLDER":
|
|
596
|
+
return index.folders;
|
|
597
|
+
case "SAVED_MODEL":
|
|
598
|
+
case "MODEL_EVALUATION_STORE":
|
|
599
|
+
case "STREAMING_ENDPOINT":
|
|
600
|
+
case "LABELING_TASK":
|
|
601
|
+
case "RETRIEVABLE_KNOWLEDGE":
|
|
602
|
+
return index.all;
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
async function flowZoneValidationIndex(client, projectKey) {
|
|
606
|
+
const result = await client.projects.map({
|
|
607
|
+
projectKey,
|
|
608
|
+
maxNodes: 100_000,
|
|
609
|
+
maxEdges: 100_000,
|
|
610
|
+
});
|
|
611
|
+
const index = {
|
|
612
|
+
projectKey: result.map.projectKey,
|
|
613
|
+
all: new Set(),
|
|
614
|
+
datasets: new Set(),
|
|
615
|
+
recipes: new Set(),
|
|
616
|
+
folders: new Set(),
|
|
617
|
+
};
|
|
618
|
+
for (const node of result.map.nodes) {
|
|
619
|
+
index.all.add(node.id);
|
|
620
|
+
switch (node.kind) {
|
|
621
|
+
case "dataset":
|
|
622
|
+
index.datasets.add(node.id);
|
|
623
|
+
break;
|
|
624
|
+
case "recipe":
|
|
625
|
+
index.recipes.add(node.id);
|
|
626
|
+
break;
|
|
627
|
+
case "folder":
|
|
628
|
+
index.folders.add(node.id);
|
|
629
|
+
break;
|
|
630
|
+
case "other":
|
|
631
|
+
break;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
return index;
|
|
635
|
+
}
|
|
636
|
+
async function validateFlowZoneOrganizeObjects(client, plan, projectKey) {
|
|
637
|
+
const indexes = new Map();
|
|
638
|
+
const missing = [];
|
|
639
|
+
const getIndex = async (itemProjectKey) => {
|
|
640
|
+
const requestedProjectKey = itemProjectKey ?? projectKey;
|
|
641
|
+
const cacheKey = requestedProjectKey ?? "";
|
|
642
|
+
const cached = indexes.get(cacheKey);
|
|
643
|
+
if (cached)
|
|
644
|
+
return cached;
|
|
645
|
+
const index = await flowZoneValidationIndex(client, requestedProjectKey);
|
|
646
|
+
indexes.set(cacheKey, index);
|
|
647
|
+
return index;
|
|
648
|
+
};
|
|
649
|
+
for (const zone of plan.zones) {
|
|
650
|
+
for (const item of zone.items) {
|
|
651
|
+
const index = await getIndex(item.projectKey);
|
|
652
|
+
const bucket = flowZoneValidationBucket(index, item.objectType);
|
|
653
|
+
if (bucket.has(item.objectId))
|
|
654
|
+
continue;
|
|
655
|
+
missing.push({
|
|
656
|
+
zone: flowZonePlanLabel(zone),
|
|
657
|
+
objectId: item.objectId,
|
|
658
|
+
objectType: item.objectType,
|
|
659
|
+
...(item.projectKey ? { projectKey: item.projectKey, } : {}),
|
|
660
|
+
reason: `Object not found in project ${item.projectKey ?? index.projectKey}.`,
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
return { valid: missing.length === 0, missing, };
|
|
665
|
+
}
|
|
666
|
+
function throwFlowZoneValidationError(validation) {
|
|
667
|
+
if (validation.valid)
|
|
668
|
+
return;
|
|
669
|
+
const first = validation.missing[0];
|
|
670
|
+
const suffix = validation.missing.length > 1 ? ` and ${validation.missing.length - 1} more` : "";
|
|
671
|
+
throw new UsageError(`Flow zone organize validation failed: ${first?.objectType}:${first?.objectId} in zone "${first?.zone}" was not found${suffix}.`, "validation_failed");
|
|
672
|
+
}
|
|
343
673
|
async function resolveFlowZoneIdFromFlags(client, flags, projectKey) {
|
|
344
674
|
const zoneId = typeof flags["zone-id"] === "string" ? flags["zone-id"].trim() : "";
|
|
345
675
|
if (zoneId)
|
|
@@ -713,7 +1043,7 @@ function resolveSqlInput(args, flags) {
|
|
|
713
1043
|
if (sources.length > 1) {
|
|
714
1044
|
throw new UsageError(`Choose exactly one SQL input source: --sql, --sql-file, --stdin, or one positional SQL argument. Usage: ${SQL_QUERY_USAGE}`);
|
|
715
1045
|
}
|
|
716
|
-
const query = sources[0].read();
|
|
1046
|
+
const query = stripUtf8Bom(sources[0].read());
|
|
717
1047
|
if (query.trim().length === 0) {
|
|
718
1048
|
throw new UsageError(`SQL input from ${sources[0].label} must not be empty. Usage: ${SQL_QUERY_USAGE}`);
|
|
719
1049
|
}
|
|
@@ -1040,6 +1370,8 @@ const BOOLEAN_FLAGS = new Set([
|
|
|
1040
1370
|
"no-backup",
|
|
1041
1371
|
"payload-only",
|
|
1042
1372
|
"allow-same-path",
|
|
1373
|
+
"sync",
|
|
1374
|
+
"validate-objects",
|
|
1043
1375
|
]);
|
|
1044
1376
|
const SHORT_FLAGS = {
|
|
1045
1377
|
h: "help",
|
|
@@ -2097,6 +2429,110 @@ const commands = {
|
|
|
2097
2429
|
"dss flow-zone move ZONE_ID --object SAVED_MODEL:model_id",
|
|
2098
2430
|
],
|
|
2099
2431
|
},
|
|
2432
|
+
organize: {
|
|
2433
|
+
handler: async (c, _a, f) => {
|
|
2434
|
+
const usage = "dss flow-zone organize (--data JSON|--data-file PATH|--file PATH|--stdin) [--sync] [--validate-objects] [--dry-run] [--project-key KEY]";
|
|
2435
|
+
const pk = f["project-key"];
|
|
2436
|
+
const plan = readFlowZoneOrganizePlan(f, usage);
|
|
2437
|
+
const sync = f["sync"] === true;
|
|
2438
|
+
const validateObjects = f["validate-objects"] === true;
|
|
2439
|
+
const zones = await c.flowZones.list(pk);
|
|
2440
|
+
const plannedItemKeys = flowZonePlanItemKeys(plan);
|
|
2441
|
+
const planned = plan.zones.map((zonePlan) => flowZoneOrganizeStep(zonePlan, findFlowZoneForPlan(zones, zonePlan), sync, plannedItemKeys));
|
|
2442
|
+
const validation = validateObjects
|
|
2443
|
+
? await validateFlowZoneOrganizeObjects(c, plan, pk)
|
|
2444
|
+
: undefined;
|
|
2445
|
+
if (validation)
|
|
2446
|
+
throwFlowZoneValidationError(validation);
|
|
2447
|
+
const itemCount = plan.zones.reduce((count, zonePlan) => count + zonePlan.items.length, 0);
|
|
2448
|
+
const pruneItemCount = planned.reduce((count, step) => {
|
|
2449
|
+
const pruneItems = Array.isArray(step.pruneItems) ? step.pruneItems : [];
|
|
2450
|
+
return count + pruneItems.length;
|
|
2451
|
+
}, 0);
|
|
2452
|
+
if (f["dry-run"] === true) {
|
|
2453
|
+
return {
|
|
2454
|
+
dryRun: true,
|
|
2455
|
+
action: "organize",
|
|
2456
|
+
resource: "flow-zone",
|
|
2457
|
+
projectKey: pk,
|
|
2458
|
+
sync,
|
|
2459
|
+
validateObjects,
|
|
2460
|
+
zoneCount: plan.zones.length,
|
|
2461
|
+
itemCount,
|
|
2462
|
+
pruneItemCount,
|
|
2463
|
+
...(validation ? { validation, } : {}),
|
|
2464
|
+
planned,
|
|
2465
|
+
};
|
|
2466
|
+
}
|
|
2467
|
+
const currentZones = [...zones,];
|
|
2468
|
+
const created = [];
|
|
2469
|
+
const updated = [];
|
|
2470
|
+
const moved = [];
|
|
2471
|
+
const pruned = [];
|
|
2472
|
+
for (const zonePlan of plan.zones) {
|
|
2473
|
+
let zone = findFlowZoneForPlan(currentZones, zonePlan);
|
|
2474
|
+
ensureFlowZonePlanTarget(zonePlan, zone);
|
|
2475
|
+
const pruneItems = sync ? flowZonePruneItems(zone, plannedItemKeys) : [];
|
|
2476
|
+
if (!zone) {
|
|
2477
|
+
zone = await c.flowZones.create({
|
|
2478
|
+
name: zonePlan.name,
|
|
2479
|
+
color: zonePlan.color,
|
|
2480
|
+
position: zonePlan.position,
|
|
2481
|
+
projectKey: pk,
|
|
2482
|
+
});
|
|
2483
|
+
currentZones.push(zone);
|
|
2484
|
+
created.push(zone);
|
|
2485
|
+
}
|
|
2486
|
+
else {
|
|
2487
|
+
const patch = {
|
|
2488
|
+
...(zonePlan.name && zonePlan.name !== zone.name ? { name: zonePlan.name, } : {}),
|
|
2489
|
+
...(zonePlan.color && zonePlan.color !== zone.color ? { color: zonePlan.color, } : {}),
|
|
2490
|
+
...(zonePlan.position !== undefined
|
|
2491
|
+
&& !flowZoneSamePosition(flowZoneCurrentPosition(zone), zonePlan.position)
|
|
2492
|
+
? { position: zonePlan.position, }
|
|
2493
|
+
: {}),
|
|
2494
|
+
projectKey: pk,
|
|
2495
|
+
};
|
|
2496
|
+
if (patch.name !== undefined || patch.color !== undefined || patch.position !== undefined) {
|
|
2497
|
+
zone = await c.flowZones.update(zone.id, patch);
|
|
2498
|
+
const index = currentZones.findIndex((candidate) => candidate.id === zone.id);
|
|
2499
|
+
if (index !== -1)
|
|
2500
|
+
currentZones[index] = zone;
|
|
2501
|
+
updated.push(zone);
|
|
2502
|
+
}
|
|
2503
|
+
}
|
|
2504
|
+
if (zonePlan.items.length > 0) {
|
|
2505
|
+
await c.flowZones.moveItems(zone.id, zonePlan.items, pk);
|
|
2506
|
+
moved.push({ zoneId: zone.id, name: zone.name, items: zonePlan.items, });
|
|
2507
|
+
}
|
|
2508
|
+
if (pruneItems.length > 0) {
|
|
2509
|
+
await c.flowZones.moveItems("default", pruneItems, pk);
|
|
2510
|
+
pruned.push({ zoneId: "default", fromZoneId: zone.id, name: zone.name, items: pruneItems, });
|
|
2511
|
+
}
|
|
2512
|
+
}
|
|
2513
|
+
return {
|
|
2514
|
+
organized: true,
|
|
2515
|
+
action: "organize",
|
|
2516
|
+
resource: "flow-zone",
|
|
2517
|
+
projectKey: pk,
|
|
2518
|
+
sync,
|
|
2519
|
+
validateObjects,
|
|
2520
|
+
zoneCount: plan.zones.length,
|
|
2521
|
+
itemCount,
|
|
2522
|
+
pruneItemCount,
|
|
2523
|
+
created,
|
|
2524
|
+
updated,
|
|
2525
|
+
moved,
|
|
2526
|
+
pruned,
|
|
2527
|
+
};
|
|
2528
|
+
},
|
|
2529
|
+
usage: "dss flow-zone organize (--data JSON|--data-file PATH|--file PATH|--stdin) [--sync] [--validate-objects] [--dry-run] [--project-key KEY]",
|
|
2530
|
+
description: "Create/update flow zones and move objects from a declarative visual organization plan.",
|
|
2531
|
+
examples: [
|
|
2532
|
+
"dss flow-zone organize --file flow-zones.json --dry-run",
|
|
2533
|
+
`dss flow-zone organize --data '{"zones":[{"name":"Raw","color":"#64748b","datasets":["raw_orders"]}]}'`,
|
|
2534
|
+
],
|
|
2535
|
+
},
|
|
2100
2536
|
graph: {
|
|
2101
2537
|
handler: (c, a, f) => {
|
|
2102
2538
|
requireArgs(a, 1, "dss flow-zone graph <id>");
|
package/dist/src/index.d.ts
CHANGED
|
@@ -19,9 +19,9 @@ export { normalizeScenarioUpdateData, SCENARIO_CANONICAL_EDITABLE_FIELDS, type S
|
|
|
19
19
|
export { SqlResource, } from "./resources/sql.js";
|
|
20
20
|
export { VariablesResource, } from "./resources/variables.js";
|
|
21
21
|
export { WikiResource, } from "./resources/wiki.js";
|
|
22
|
-
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "./schemas.js";
|
|
22
|
+
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZonePositionSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "./schemas.js";
|
|
23
23
|
export type { SafeParseResult, } from "./schemas.js";
|
|
24
|
-
export type { BuildMode, CodeEnvActionResult, CodeEnvCreateOptions, CodeEnvDetails, CodeEnvPackageList, CodeEnvSetPackagesOptions, CodeEnvSummary, CodeEnvUpdatePackagesOptions, CodeEnvUsage, CodeEnvWaitOptions, ConnectionSummary, DashboardDetails, DashboardSummary, DataQualityComputeResult, DataQualityProjectStatus, DataQualityRule, DataQualityRuleResult, DataQualityRules, DataQualityStatus, DataQualityStatusByPartition, DataQualityTimeline, DataQualityTimelineEntry, DatasetCreateOptions, DatasetDetails, DatasetSchema, DatasetSummary, FlowMapOptions, FlowZone, FlowZoneCreateOptions, FlowZoneItem, FlowZoneObjectType, FlowZoneUpdateOptions, FolderCreateOptions, FolderDetails, FolderItem, FolderSummary, FutureState, FutureWaitResult, InsightDetails, InsightSummary, JobSummary, JobWaitResult, JupyterCell, JupyterNotebookContent, JupyterNotebookSummary, NotebookSession, ProjectDetails, ProjectMetadata, ProjectSummary, ProjectVariables, RecipeCreateOptions, RecipeCreateResult, RecipeDetails, RecipeSummary, ScenarioDetails, ScenarioStatus, ScenarioSummary, SqlNotebookCell, SqlNotebookContent, SqlNotebookSummary, SqlQueryResponse, SqlQueryResult, SqlQuerySchema, WikiArticleData, WikiArticleMetadata, WikiSettings, WikiTaxonomyNode, } from "./schemas.js";
|
|
24
|
+
export type { BuildMode, CodeEnvActionResult, CodeEnvCreateOptions, CodeEnvDetails, CodeEnvPackageList, CodeEnvSetPackagesOptions, CodeEnvSummary, CodeEnvUpdatePackagesOptions, CodeEnvUsage, CodeEnvWaitOptions, ConnectionSummary, DashboardDetails, DashboardSummary, DataQualityComputeResult, DataQualityProjectStatus, DataQualityRule, DataQualityRuleResult, DataQualityRules, DataQualityStatus, DataQualityStatusByPartition, DataQualityTimeline, DataQualityTimelineEntry, DatasetCreateOptions, DatasetDetails, DatasetSchema, DatasetSummary, FlowMapOptions, FlowZone, FlowZoneCreateOptions, FlowZoneItem, FlowZoneObjectType, FlowZonePosition, FlowZoneUpdateOptions, FolderCreateOptions, FolderDetails, FolderItem, FolderSummary, FutureState, FutureWaitResult, InsightDetails, InsightSummary, JobSummary, JobWaitResult, JupyterCell, JupyterNotebookContent, JupyterNotebookSummary, NotebookSession, ProjectDetails, ProjectMetadata, ProjectSummary, ProjectVariables, RecipeCreateOptions, RecipeCreateResult, RecipeDetails, RecipeSummary, ScenarioDetails, ScenarioStatus, ScenarioSummary, SqlNotebookCell, SqlNotebookContent, SqlNotebookSummary, SqlQueryResponse, SqlQueryResult, SqlQuerySchema, WikiArticleData, WikiArticleMetadata, WikiSettings, WikiTaxonomyNode, } from "./schemas.js";
|
|
25
25
|
export { deepMerge, } from "./utils/deep-merge.js";
|
|
26
26
|
export { type NormalizedFlowEdge, type NormalizedFlowMap, type NormalizedFlowNode, normalizeFlowGraph, } from "./utils/flow-map.js";
|
|
27
27
|
export { sanitizeFileName, } from "./utils/sanitize.js";
|
package/dist/src/index.js
CHANGED
|
@@ -24,7 +24,7 @@ export { SqlResource, } from "./resources/sql.js";
|
|
|
24
24
|
export { VariablesResource, } from "./resources/variables.js";
|
|
25
25
|
export { WikiResource, } from "./resources/wiki.js";
|
|
26
26
|
// Schemas (TypeBox schema objects for runtime validation)
|
|
27
|
-
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "./schemas.js";
|
|
27
|
+
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZonePositionSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "./schemas.js";
|
|
28
28
|
// Utilities
|
|
29
29
|
export { deepMerge, } from "./utils/deep-merge.js";
|
|
30
30
|
export { normalizeFlowGraph, } from "./utils/flow-map.js";
|
|
@@ -306,9 +306,31 @@ function buildDatasetCreateBody(opts) {
|
|
|
306
306
|
managed: opts.managed ?? true,
|
|
307
307
|
};
|
|
308
308
|
}
|
|
309
|
+
const DATASET_CLONE_PARAM_KEYS = [
|
|
310
|
+
"connection",
|
|
311
|
+
"path",
|
|
312
|
+
"table",
|
|
313
|
+
"schema",
|
|
314
|
+
"catalog",
|
|
315
|
+
"folderSmartId",
|
|
316
|
+
"metastoreTableName",
|
|
317
|
+
"mode",
|
|
318
|
+
];
|
|
319
|
+
function cloneDatasetParams(params) {
|
|
320
|
+
const sourceParams = params && typeof params === "object" && !Array.isArray(params)
|
|
321
|
+
? params
|
|
322
|
+
: {};
|
|
323
|
+
const cloned = {};
|
|
324
|
+
for (const key of DATASET_CLONE_PARAM_KEYS) {
|
|
325
|
+
const value = sourceParams[key];
|
|
326
|
+
if (value !== undefined)
|
|
327
|
+
cloned[key] = value;
|
|
328
|
+
}
|
|
329
|
+
return cloned;
|
|
330
|
+
}
|
|
309
331
|
export function buildDatasetCloneSettings(source, targetName, projectKey, opts) {
|
|
310
332
|
const params = {
|
|
311
|
-
...source.params,
|
|
333
|
+
...cloneDatasetParams(source.params),
|
|
312
334
|
...(opts.path !== undefined ? { path: opts.path, } : {}),
|
|
313
335
|
...(opts.table !== undefined ? { table: opts.table, mode: "table", } : {}),
|
|
314
336
|
...(opts.metastoreTableName !== undefined
|
|
@@ -12,7 +12,7 @@ export declare class FlowZonesResource extends BaseResource {
|
|
|
12
12
|
get(zoneId: string, projectKey?: string): Promise<FlowZone>;
|
|
13
13
|
/** Create a flow zone. */
|
|
14
14
|
create(opts: FlowZoneCreateOptions): Promise<FlowZone>;
|
|
15
|
-
/** Update flow zone settings such as name and
|
|
15
|
+
/** Update flow zone settings such as name, color, and manual position. */
|
|
16
16
|
update(zoneId: string, opts: FlowZoneUpdateOptions): Promise<FlowZone>;
|
|
17
17
|
/** Delete a flow zone. DSS moves its items back to the default zone. */
|
|
18
18
|
delete(zoneId: string, projectKey?: string): Promise<void>;
|
|
@@ -24,15 +24,17 @@ export class FlowZonesResource extends BaseResource {
|
|
|
24
24
|
const raw = await this.client.post(`/public/api/projects/${this.enc(opts.projectKey)}/flow/zones`, {
|
|
25
25
|
name: opts.name,
|
|
26
26
|
color: opts.color ?? "#2ab1ac",
|
|
27
|
+
...(opts.position !== undefined ? { position: opts.position, } : {}),
|
|
27
28
|
});
|
|
28
29
|
return this.client.safeParse(FlowZoneSchema, raw, "flowZones.create");
|
|
29
30
|
}
|
|
30
|
-
/** Update flow zone settings such as name and
|
|
31
|
+
/** Update flow zone settings such as name, color, and manual position. */
|
|
31
32
|
async update(zoneId, opts) {
|
|
32
33
|
const current = await this.get(zoneId, opts.projectKey);
|
|
33
34
|
const merged = deepMerge(current, {
|
|
34
35
|
...(opts.name !== undefined ? { name: opts.name, } : {}),
|
|
35
36
|
...(opts.color !== undefined ? { color: opts.color, } : {}),
|
|
37
|
+
...(opts.position !== undefined ? { position: opts.position, } : {}),
|
|
36
38
|
});
|
|
37
39
|
await this.client.putVoid(`/public/api/projects/${this.enc(opts.projectKey)}/flow/zones/${encodeURIComponent(zoneId)}`, merged);
|
|
38
40
|
return this.get(zoneId, opts.projectKey);
|
|
@@ -108,7 +108,28 @@ function rewriteRefs(value, rewrites) {
|
|
|
108
108
|
function escapedRegExp(value) {
|
|
109
109
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
110
110
|
}
|
|
111
|
-
function
|
|
111
|
+
function isSqlRecipeType(recipeType) {
|
|
112
|
+
return typeof recipeType === "string" && recipeType.toLowerCase().includes("sql");
|
|
113
|
+
}
|
|
114
|
+
function rewriteSqlTableReferences(payload, rewrites) {
|
|
115
|
+
let next = payload;
|
|
116
|
+
for (const [from, to,] of Object.entries(rewrites)) {
|
|
117
|
+
if (!from)
|
|
118
|
+
continue;
|
|
119
|
+
const escaped = escapedRegExp(from);
|
|
120
|
+
const pattern = new RegExp(String
|
|
121
|
+
.raw `\b(FROM|JOIN)(\s+)(?:(["\`])${escaped}\3|(\[)${escaped}\]|${escaped})(?![A-Za-z0-9_.])`, "gi");
|
|
122
|
+
next = next.replace(pattern, (_match, keyword, space, quote, bracket) => {
|
|
123
|
+
if (quote)
|
|
124
|
+
return `${keyword}${space}${quote}${to}${quote}`;
|
|
125
|
+
if (bracket)
|
|
126
|
+
return `${keyword}${space}[${to}]`;
|
|
127
|
+
return `${keyword}${space}${to}`;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return next;
|
|
131
|
+
}
|
|
132
|
+
function rewritePayload(payload, rewrites, payloadTextRewrites = {}, recipeType) {
|
|
112
133
|
if (payload === undefined
|
|
113
134
|
|| (Object.keys(rewrites).length === 0 && Object.keys(payloadTextRewrites).length === 0)) {
|
|
114
135
|
return payload;
|
|
@@ -120,6 +141,9 @@ function rewritePayload(payload, rewrites, payloadTextRewrites = {}) {
|
|
|
120
141
|
const escaped = escapedRegExp(from);
|
|
121
142
|
next = next.replace(new RegExp(`\\bdataiku\\.(Dataset|Folder)\\(\\s*(['"])${escaped}\\2\\s*\\)`, "g"), (_match, kind, quote) => `dataiku.${kind}(${quote}${to}${quote})`);
|
|
122
143
|
}
|
|
144
|
+
if (isSqlRecipeType(recipeType)) {
|
|
145
|
+
next = rewriteSqlTableReferences(next, rewrites);
|
|
146
|
+
}
|
|
123
147
|
for (const [from, to,] of Object.entries(payloadTextRewrites)) {
|
|
124
148
|
if (from.length > 0)
|
|
125
149
|
next = next.split(from).join(to);
|
|
@@ -647,7 +671,7 @@ export class RecipesResource extends BaseResource {
|
|
|
647
671
|
if (opts.payloadTextRewrites)
|
|
648
672
|
Object.assign(payloadTextRewrites, opts.payloadTextRewrites);
|
|
649
673
|
const recipe = cloneRecipeDefinition(source.recipe, opts.name, pk, graphRewrites);
|
|
650
|
-
const payload = rewritePayload(source.payload, payloadRewrites, payloadTextRewrites);
|
|
674
|
+
const payload = rewritePayload(source.payload, payloadRewrites, payloadTextRewrites, opts.recipeType ?? source.recipe.type);
|
|
651
675
|
const copiedOutputDatasets = [];
|
|
652
676
|
if (opts.copyOutputSettings) {
|
|
653
677
|
for (const [from, to,] of Object.entries(outputRewrites)) {
|
package/dist/src/schemas.d.ts
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* The types package (packages/types/) owns the TypeBox schema definitions.
|
|
4
4
|
* SDK consumers get everything through this re-export.
|
|
5
5
|
*/
|
|
6
|
-
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, ScenarioWaitResultSchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "../packages/types/src/index.js";
|
|
7
|
-
export type { BuildMode, CodeEnvActionResult, CodeEnvCreateOptions, CodeEnvDetails, CodeEnvPackageList, CodeEnvSetPackagesOptions, CodeEnvSummary, CodeEnvUpdatePackagesOptions, CodeEnvUsage, CodeEnvWaitOptions, ConnectionSummary, DashboardDetails, DashboardSummary, DataQualityComputeResult, DataQualityProjectStatus, DataQualityRule, DataQualityRuleResult, DataQualityRules, DataQualityStatus, DataQualityStatusByPartition, DataQualityTimeline, DataQualityTimelineEntry, DatasetCreateOptions, DatasetDetails, DatasetSchema, DatasetSummary, FlowMapOptions, FlowZone, FlowZoneCreateOptions, FlowZoneItem, FlowZoneObjectType, FlowZoneUpdateOptions, FolderCreateOptions, FolderDetails, FolderItem, FolderSummary, FutureState, FutureWaitResult, InsightDetails, InsightSummary, JobSummary, JobWaitResult, JupyterCell, JupyterNotebookContent, JupyterNotebookSummary, NotebookSession, ProjectDetails, ProjectMetadata, ProjectSummary, ProjectVariables, RecipeCreateOptions, RecipeCreateResult, RecipeDetails, RecipeSummary, SafeParseResult, ScenarioDetails, ScenarioStatus, ScenarioSummary, ScenarioWaitResult, SqlNotebookCell, SqlNotebookContent, SqlNotebookSummary, SqlQueryResponse, SqlQueryResult, SqlQuerySchema, WikiArticleData, WikiArticleMetadata, WikiSettings, WikiTaxonomyNode, } from "../packages/types/src/index.js";
|
|
6
|
+
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZonePositionSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, ScenarioWaitResultSchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "../packages/types/src/index.js";
|
|
7
|
+
export type { BuildMode, CodeEnvActionResult, CodeEnvCreateOptions, CodeEnvDetails, CodeEnvPackageList, CodeEnvSetPackagesOptions, CodeEnvSummary, CodeEnvUpdatePackagesOptions, CodeEnvUsage, CodeEnvWaitOptions, ConnectionSummary, DashboardDetails, DashboardSummary, DataQualityComputeResult, DataQualityProjectStatus, DataQualityRule, DataQualityRuleResult, DataQualityRules, DataQualityStatus, DataQualityStatusByPartition, DataQualityTimeline, DataQualityTimelineEntry, DatasetCreateOptions, DatasetDetails, DatasetSchema, DatasetSummary, FlowMapOptions, FlowZone, FlowZoneCreateOptions, FlowZoneItem, FlowZoneObjectType, FlowZonePosition, FlowZoneUpdateOptions, FolderCreateOptions, FolderDetails, FolderItem, FolderSummary, FutureState, FutureWaitResult, InsightDetails, InsightSummary, JobSummary, JobWaitResult, JupyterCell, JupyterNotebookContent, JupyterNotebookSummary, NotebookSession, ProjectDetails, ProjectMetadata, ProjectSummary, ProjectVariables, RecipeCreateOptions, RecipeCreateResult, RecipeDetails, RecipeSummary, SafeParseResult, ScenarioDetails, ScenarioStatus, ScenarioSummary, ScenarioWaitResult, SqlNotebookCell, SqlNotebookContent, SqlNotebookSummary, SqlQueryResponse, SqlQueryResult, SqlQuerySchema, WikiArticleData, WikiArticleMetadata, WikiSettings, WikiTaxonomyNode, } from "../packages/types/src/index.js";
|
package/dist/src/schemas.js
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* The types package (packages/types/) owns the TypeBox schema definitions.
|
|
4
4
|
* SDK consumers get everything through this re-export.
|
|
5
5
|
*/
|
|
6
|
-
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, ScenarioWaitResultSchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "../packages/types/src/index.js";
|
|
6
|
+
export { BuildModeSchema, CodeEnvActionResultSchema, CodeEnvCreateOptionsSchema, CodeEnvDetailsSchema, CodeEnvPackageListSchema, CodeEnvSetPackagesOptionsSchema, CodeEnvSummaryArraySchema, CodeEnvSummarySchema, CodeEnvUpdatePackagesOptionsSchema, CodeEnvUsageArraySchema, CodeEnvWaitOptionsSchema, ConnectionSummarySchema, DashboardDetailsSchema, DashboardSummaryArraySchema, DashboardSummarySchema, DataQualityComputeResultSchema, DataQualityProjectStatusSchema, DataQualityRuleArraySchema, DataQualityRuleResultArraySchema, DataQualityRuleResultSchema, DataQualityRuleSchema, DataQualityRulesSchema, DataQualityStatusByPartitionSchema, DataQualityStatusSchema, DataQualityTimelineEntrySchema, DataQualityTimelineSchema, DatasetCreateOptionsSchema, DatasetDetailsSchema, DatasetSchemaSchema, DatasetSummaryArraySchema, DatasetSummarySchema, FlowMapOptionsSchema, FlowZoneArraySchema, FlowZoneCreateOptionsSchema, FlowZoneItemSchema, FlowZoneObjectTypeSchema, FlowZonePositionSchema, FlowZoneSchema, FlowZoneUpdateOptionsSchema, FolderCreateOptionsSchema, FolderDetailsSchema, FolderItemArraySchema, FolderItemSchema, FolderSummaryArraySchema, FolderSummarySchema, FutureStateSchema, FutureWaitResultSchema, InsightDetailsSchema, InsightSummaryArraySchema, InsightSummarySchema, JobSummaryArraySchema, JobSummarySchema, JobWaitResultSchema, JupyterCellSchema, JupyterNotebookContentSchema, JupyterNotebookSummaryArraySchema, JupyterNotebookSummarySchema, NotebookSessionArraySchema, NotebookSessionSchema, parseSchema, ProjectDetailsSchema, ProjectMetadataSchema, ProjectSummaryArraySchema, ProjectSummarySchema, ProjectVariablesSchema, RecipeCreateOptionsSchema, RecipeCreateResultSchema, RecipeDetailsSchema, RecipeSummaryArraySchema, RecipeSummarySchema, safeParseSchema, ScenarioDetailsSchema, ScenarioStatusSchema, ScenarioSummaryArraySchema, ScenarioSummarySchema, ScenarioWaitResultSchema, SqlNotebookCellSchema, SqlNotebookContentSchema, SqlNotebookSummaryArraySchema, SqlNotebookSummarySchema, SqlQueryResponseSchema, SqlQueryResultSchema, SqlQuerySchemaSchema, WikiArticleDataArraySchema, WikiArticleDataSchema, WikiArticleMetadataSchema, WikiSettingsSchema, WikiTaxonomyNodeSchema, } from "../packages/types/src/index.js";
|
package/package.json
CHANGED
|
@@ -282,6 +282,11 @@ export declare const FlowZoneItemSchema: import("@sinclair/typebox").TObject<{
|
|
|
282
282
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
283
283
|
}>;
|
|
284
284
|
export type FlowZoneItem = Static<typeof FlowZoneItemSchema>;
|
|
285
|
+
export declare const FlowZonePositionSchema: import("@sinclair/typebox").TObject<{
|
|
286
|
+
x: import("@sinclair/typebox").TNumber;
|
|
287
|
+
y: import("@sinclair/typebox").TNumber;
|
|
288
|
+
}>;
|
|
289
|
+
export type FlowZonePosition = Static<typeof FlowZonePositionSchema>;
|
|
285
290
|
export declare const FlowZoneSchema: import("@sinclair/typebox").TObject<{
|
|
286
291
|
id: import("@sinclair/typebox").TString;
|
|
287
292
|
name: import("@sinclair/typebox").TString;
|
|
@@ -297,6 +302,10 @@ export declare const FlowZoneSchema: import("@sinclair/typebox").TObject<{
|
|
|
297
302
|
objectType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"DATASET">, import("@sinclair/typebox").TLiteral<"MANAGED_FOLDER">, import("@sinclair/typebox").TLiteral<"SAVED_MODEL">, import("@sinclair/typebox").TLiteral<"RECIPE">, import("@sinclair/typebox").TLiteral<"MODEL_EVALUATION_STORE">, import("@sinclair/typebox").TLiteral<"STREAMING_ENDPOINT">, import("@sinclair/typebox").TLiteral<"LABELING_TASK">, import("@sinclair/typebox").TLiteral<"RETRIEVABLE_KNOWLEDGE">]>;
|
|
298
303
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
299
304
|
}>>>;
|
|
305
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
306
|
+
x: import("@sinclair/typebox").TNumber;
|
|
307
|
+
y: import("@sinclair/typebox").TNumber;
|
|
308
|
+
}>>;
|
|
300
309
|
}>;
|
|
301
310
|
export type FlowZone = Static<typeof FlowZoneSchema>;
|
|
302
311
|
export declare const FlowZoneArraySchema: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
@@ -314,17 +323,29 @@ export declare const FlowZoneArraySchema: import("@sinclair/typebox").TArray<imp
|
|
|
314
323
|
objectType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"DATASET">, import("@sinclair/typebox").TLiteral<"MANAGED_FOLDER">, import("@sinclair/typebox").TLiteral<"SAVED_MODEL">, import("@sinclair/typebox").TLiteral<"RECIPE">, import("@sinclair/typebox").TLiteral<"MODEL_EVALUATION_STORE">, import("@sinclair/typebox").TLiteral<"STREAMING_ENDPOINT">, import("@sinclair/typebox").TLiteral<"LABELING_TASK">, import("@sinclair/typebox").TLiteral<"RETRIEVABLE_KNOWLEDGE">]>;
|
|
315
324
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
316
325
|
}>>>;
|
|
326
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
327
|
+
x: import("@sinclair/typebox").TNumber;
|
|
328
|
+
y: import("@sinclair/typebox").TNumber;
|
|
329
|
+
}>>;
|
|
317
330
|
}>>;
|
|
318
331
|
export declare const FlowZoneCreateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
319
332
|
name: import("@sinclair/typebox").TString;
|
|
320
333
|
color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
321
334
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
335
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
336
|
+
x: import("@sinclair/typebox").TNumber;
|
|
337
|
+
y: import("@sinclair/typebox").TNumber;
|
|
338
|
+
}>>;
|
|
322
339
|
}>;
|
|
323
340
|
export type FlowZoneCreateOptions = Static<typeof FlowZoneCreateOptionsSchema>;
|
|
324
341
|
export declare const FlowZoneUpdateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
325
342
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
326
343
|
color: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
327
344
|
projectKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
345
|
+
position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
346
|
+
x: import("@sinclair/typebox").TNumber;
|
|
347
|
+
y: import("@sinclair/typebox").TNumber;
|
|
348
|
+
}>>;
|
|
328
349
|
}>;
|
|
329
350
|
export type FlowZoneUpdateOptions = Static<typeof FlowZoneUpdateOptionsSchema>;
|
|
330
351
|
export declare const FolderCreateOptionsSchema: import("@sinclair/typebox").TObject<{
|
|
@@ -340,6 +340,10 @@ export const FlowZoneItemSchema = Type.Object({
|
|
|
340
340
|
objectType: FlowZoneObjectTypeSchema,
|
|
341
341
|
projectKey: Type.Optional(Type.String()),
|
|
342
342
|
}, { additionalProperties: true, });
|
|
343
|
+
export const FlowZonePositionSchema = Type.Object({
|
|
344
|
+
x: Type.Number(),
|
|
345
|
+
y: Type.Number(),
|
|
346
|
+
}, { additionalProperties: false, });
|
|
343
347
|
export const FlowZoneSchema = Type.Object({
|
|
344
348
|
id: Type.String(),
|
|
345
349
|
name: Type.String(),
|
|
@@ -347,17 +351,20 @@ export const FlowZoneSchema = Type.Object({
|
|
|
347
351
|
projectKey: Type.Optional(Type.String()),
|
|
348
352
|
items: Type.Optional(Type.Array(FlowZoneItemSchema)),
|
|
349
353
|
shared: Type.Optional(Type.Array(FlowZoneItemSchema)),
|
|
354
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
350
355
|
}, { additionalProperties: true, });
|
|
351
356
|
export const FlowZoneArraySchema = Type.Array(FlowZoneSchema);
|
|
352
357
|
export const FlowZoneCreateOptionsSchema = Type.Object({
|
|
353
358
|
name: Type.String(),
|
|
354
359
|
color: Type.Optional(Type.String()),
|
|
355
360
|
projectKey: Type.Optional(Type.String()),
|
|
361
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
356
362
|
}, { additionalProperties: false, });
|
|
357
363
|
export const FlowZoneUpdateOptionsSchema = Type.Object({
|
|
358
364
|
name: Type.Optional(Type.String()),
|
|
359
365
|
color: Type.Optional(Type.String()),
|
|
360
366
|
projectKey: Type.Optional(Type.String()),
|
|
367
|
+
position: Type.Optional(FlowZonePositionSchema),
|
|
361
368
|
}, { additionalProperties: false, });
|
|
362
369
|
// ---------------------------------------------------------------------------
|
|
363
370
|
// Folders
|