@uipath/case-tool 1.200.0-preview.120 → 1.201.0-preview.121

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.
Files changed (56) hide show
  1. package/README.md +1 -1
  2. package/dist/authoring-aaaqwck3.js +296 -0
  3. package/dist/{browser-strategy-d4zm14fb.js → browser-strategy-rkcvc6tn.js} +1 -1
  4. package/dist/case-pack-service-96tjknaz.js +119 -0
  5. package/dist/{de-3RMZHIP6-1na18a74.js → de-K6MLR24N-00fjz82b.js} +474 -51
  6. package/dist/{de-LVBY3VVG-tc58p3x6.js → de-WMKOGI7B-r1821wpe.js} +16 -7
  7. package/dist/{en-ZBJX4WAU-5yq8e307.js → en-ILA4HPE5-fhwvq92r.js} +322 -4
  8. package/dist/{en-4UFXRW7N-mqabr9tf.js → en-X4DLPKLJ-dt1wtdm7.js} +17 -5
  9. package/dist/{es-CI4AE5B5-55sgqk64.js → es-BVPGJUWA-9gk2g9yb.js} +16 -7
  10. package/dist/{es-EYHYM5C4-3bajghda.js → es-HTQSD352-m9rr3f0g.js} +468 -45
  11. package/dist/{es-MX-QSQP2KWV-qvgkwvz2.js → es-MX-FOX525CG-87g500gr.js} +474 -51
  12. package/dist/{es-MX-OLZNAYY5-30cmv1dx.js → es-MX-U6YL5KQX-ynwxdjr8.js} +16 -7
  13. package/dist/{fr-FXFJQRD3-rfztd3e5.js → fr-54THJ4QH-d6ezjbhw.js} +473 -50
  14. package/dist/{fr-CCN6ZO5E-x2akzsjt.js → fr-EKTTDR7Z-bmpwp31r.js} +16 -7
  15. package/dist/{packager-tool-0t8yvryc.js → index-8bsngk9y.js} +119690 -229182
  16. package/dist/index-9f8q2ege.js +2058 -0
  17. package/dist/index-cncq089f.js +16491 -0
  18. package/dist/index-hsadteg4.js +634 -0
  19. package/dist/{index-w23k88b5.js → index-p50kx6jv.js} +202 -64
  20. package/dist/index.js +16 -9
  21. package/dist/{ja-G7NJYQ42-ve4gadd7.js → ja-MHUPLSWO-3qwy4jc0.js} +470 -47
  22. package/dist/{ja-O2NEV5D6-nt9rhd8c.js → ja-Y2YBTXNN-96cvy5av.js} +16 -7
  23. package/dist/js-yaml-cggj6w7q.js +3145 -0
  24. package/dist/{ko-7XWV2SEQ-chk3y7aj.js → ko-S33XAV26-cxf4dn2t.js} +16 -7
  25. package/dist/{ko-QDHECDTM-zmbqs9pr.js → ko-XPJTXIKK-w1hs4px7.js} +467 -44
  26. package/dist/node-strategy-8gzp67xs.js +350 -0
  27. package/dist/packager-tool-1cb0d5e0.js +237 -0
  28. package/dist/{packager-tool-973f0r2g.js → packager-tool-1yy9x4vk.js} +17 -5
  29. package/dist/{packager-tool-1ps2qeqg.js → packager-tool-5arsyj36.js} +3 -2
  30. package/dist/packager-tool-8f28ypk9.js +93566 -0
  31. package/dist/packager-tool-b098y4a2.js +646 -0
  32. package/dist/{packager-tool-qz3cg5tg.js → packager-tool-cqrsre00.js} +340 -22
  33. package/dist/packager-tool-nhnf1ap2.js +13607 -0
  34. package/dist/packager-tool-qa9gftnj.js +31 -0
  35. package/dist/packager-tool-w3h8xrnv.js +472 -0
  36. package/dist/packager-tool-we1phz71.js +41 -0
  37. package/dist/{packager-tool-8eennarq.js → packager-tool-wvqz81mx.js} +52 -690
  38. package/dist/packager-tool-zqa5k9f7.js +8774 -0
  39. package/dist/packager-tool-zx48pq4v.js +4902 -0
  40. package/dist/packager-tool.js +5 -3
  41. package/dist/{pt-VXJT4WUJ-nwkc9k2p.js → pt-4JEPEAST-40npwxyw.js} +471 -48
  42. package/dist/{pt-BR-Z4J3LEEO-cf33d2zv.js → pt-BR-JO45SCNI-4kbfnzc4.js} +16 -7
  43. package/dist/{pt-BR-SADBLGXA-yd89fdy2.js → pt-BR-TV7NR3ID-vgd26pj1.js} +470 -47
  44. package/dist/{pt-CRSN3TCU-txxbbcxm.js → pt-W3NA4LIZ-f02gapvs.js} +16 -7
  45. package/dist/{ro-7JHKFGCH-hbtkeqdr.js → ro-RKJ74FV3-qn0ey39v.js} +473 -50
  46. package/dist/{ro-WMQEVD7D-6mtq0e6b.js → ro-WLKX6HF5-fcbe2zz8.js} +16 -7
  47. package/dist/tool.js +14 -8
  48. package/dist/{tr-UCMB7W3T-xmxp2naq.js → tr-3U2W2XCA-zg3zcmq3.js} +15 -6
  49. package/dist/{tr-Q6IHBFK7-zs9rsm1b.js → tr-X7R6GQNB-shwv16dz.js} +482 -59
  50. package/dist/{zh-CN-3BPA3WIX-c5ts2m5v.js → zh-CN-FEZ24J4A-q5b5x20w.js} +470 -47
  51. package/dist/{zh-CN-2QOHEFC5-ryjb2byk.js → zh-CN-IPZYQR3P-1h76csc4.js} +16 -7
  52. package/dist/{zh-TW-QCJEQC5S-b1v637hd.js → zh-TW-GKSCT6NW-4n1yfre0.js} +464 -41
  53. package/dist/{zh-TW-Q5QSSTS6-6y7yjbbn.js → zh-TW-YPVSQVGT-wbybwpwt.js} +16 -7
  54. package/package.json +2 -2
  55. package/dist/node-strategy-7bvg07kx.js +0 -63
  56. package/dist/packager-tool-4f38v0ry.js +0 -1161
package/README.md CHANGED
@@ -96,7 +96,7 @@ field:in=value1|value2 field matches any of the values
96
96
  field1=v1,field2=v2 multiple conditions (AND logic)
97
97
  ```
98
98
 
99
- Filterable fields: `name`, `description`, `category`, `tags`
99
+ Filterable fields: `name`, `title`, `description`, `category`, `connectorKey`, `systemName`, `tags`
100
100
 
101
101
  **Examples:**
102
102
 
@@ -0,0 +1,296 @@
1
+ import {
2
+ resolveMaestroRegistry
3
+ } from "./packager-tool-we1phz71.js";
4
+ import {
5
+ OutputFormatter,
6
+ RESULTS,
7
+ getOutputFormat,
8
+ getOutputFormatExplicit,
9
+ processContext
10
+ } from "./packager-tool-zx48pq4v.js";
11
+ import {
12
+ getFileSystem
13
+ } from "./packager-tool-1cb0d5e0.js";
14
+ import"./packager-tool-wckvcay0.js";
15
+
16
+ // ../builder-sdk/src/argv.ts
17
+ function addValue(argv, flag, value) {
18
+ if (typeof value === "string") {
19
+ argv.push(flag, value);
20
+ }
21
+ }
22
+
23
+ // ../builder-sdk/src/delegate.ts
24
+ import { spawn } from "node:child_process";
25
+ import { createRequire } from "node:module";
26
+ var MINIMUM_FLOW_SDK_VERSION = "1.1.0";
27
+ function commandLabel(family, verb) {
28
+ return `uip maestro ${family} ${verb}`;
29
+ }
30
+ function fail(message, instructions) {
31
+ OutputFormatter.error({
32
+ Result: RESULTS.Failure,
33
+ Message: message,
34
+ Instructions: instructions
35
+ });
36
+ return 1;
37
+ }
38
+ function parseVersion(version) {
39
+ const match = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.exec(version);
40
+ if (!match)
41
+ return null;
42
+ return [
43
+ Number(match[1]),
44
+ Number(match[2]),
45
+ Number(match[3]),
46
+ match[4] !== undefined
47
+ ];
48
+ }
49
+ function versionMeetsFloor(version, floor) {
50
+ const installed = parseVersion(version);
51
+ const minimum = parseVersion(floor);
52
+ if (!installed || !minimum)
53
+ return false;
54
+ for (let index = 0;index < 3; index++) {
55
+ if (installed[index] !== minimum[index]) {
56
+ return installed[index] > minimum[index];
57
+ }
58
+ }
59
+ return !installed[3] || minimum[3];
60
+ }
61
+ async function runChild(cliPath, args, cwd, label) {
62
+ return await new Promise((resolve) => {
63
+ const child = spawn("node", [cliPath, ...args], {
64
+ cwd,
65
+ env: process.env,
66
+ stdio: "inherit"
67
+ });
68
+ child.once("error", (error) => {
69
+ resolve(fail(`${label}: ${error.message}`, "Check that node is on PATH, then retry."));
70
+ });
71
+ child.once("exit", (code, signal) => {
72
+ if (code !== null) {
73
+ resolve(code);
74
+ return;
75
+ }
76
+ resolve(fail(`${label}: SDK process ended with signal ${signal ?? "unknown"}.`, "Retry the command."));
77
+ });
78
+ });
79
+ }
80
+ async function resolveFlowSdk(workspace, label) {
81
+ const fs = getFileSystem();
82
+ let packagePath;
83
+ try {
84
+ packagePath = createRequire(import.meta.url).resolve("@uipath/flow-sdk/package.json", { paths: [workspace] });
85
+ } catch {
86
+ return {
87
+ ok: false,
88
+ message: `${label}: @uipath/flow-sdk is not installed in this workspace.`,
89
+ instructions: "Add it to this project's dependencies: npm install --save-dev @uipath/flow-sdk (requires an .npmrc routing @uipath to https://npm.pkg.github.com/)."
90
+ };
91
+ }
92
+ const packageText = await fs.readFile(packagePath, "utf-8");
93
+ if (packageText === null) {
94
+ return {
95
+ ok: false,
96
+ message: `${label}: could not read ${packagePath}.`,
97
+ instructions: "Reinstall @uipath/flow-sdk, then retry."
98
+ };
99
+ }
100
+ let version = "";
101
+ let bin = {};
102
+ try {
103
+ const parsed = JSON.parse(packageText);
104
+ version = typeof parsed.version === "string" ? parsed.version : "";
105
+ if (parsed.bin && typeof parsed.bin === "object") {
106
+ for (const [name, target] of Object.entries(parsed.bin)) {
107
+ if (typeof target === "string")
108
+ bin[name] = target;
109
+ }
110
+ }
111
+ } catch {
112
+ version = "";
113
+ bin = {};
114
+ }
115
+ if (!versionMeetsFloor(version, MINIMUM_FLOW_SDK_VERSION)) {
116
+ return {
117
+ ok: false,
118
+ message: `${label}: found @uipath/flow-sdk ${version || "with no valid version"}; need >= ${MINIMUM_FLOW_SDK_VERSION}.`,
119
+ instructions: "Run: npm install --save-dev @uipath/flow-sdk@latest."
120
+ };
121
+ }
122
+ return {
123
+ ok: true,
124
+ packageDir: fs.path.dirname(packagePath),
125
+ version,
126
+ bin
127
+ };
128
+ }
129
+ async function delegateToFlowSdk({
130
+ family,
131
+ commandVerb,
132
+ sdkVerb = commandVerb,
133
+ argv,
134
+ cwd
135
+ }) {
136
+ const fs = getFileSystem();
137
+ const workspace = cwd ?? fs.env.cwd();
138
+ const label = commandLabel(family, commandVerb);
139
+ const resolution = await resolveFlowSdk(workspace, label);
140
+ if (!resolution.ok) {
141
+ return fail(resolution.message, resolution.instructions);
142
+ }
143
+ const cliPath = fs.path.join(resolution.packageDir, "dist", "cli", "index.js");
144
+ return await runChild(cliPath, [family, sdkVerb, ...argv], workspace, label);
145
+ }
146
+
147
+ // ../builder-sdk/src/examples.ts
148
+ function sdkCliExample(description, command, message) {
149
+ return [
150
+ {
151
+ Description: description,
152
+ Command: command,
153
+ Output: {
154
+ Code: "SdkCliOutput",
155
+ Data: { Message: message }
156
+ }
157
+ }
158
+ ];
159
+ }
160
+
161
+ // ../builder-sdk/src/library-option.ts
162
+ async function resolveLibraryOption(explicit) {
163
+ if (explicit !== undefined)
164
+ return explicit;
165
+ const registry = await resolveMaestroRegistry();
166
+ return registry?.libraryJson;
167
+ }
168
+
169
+ // ../builder-sdk/src/commands/check.ts
170
+ var CHECK_EXAMPLES = {
171
+ flow: { input: "Order.flow.ts", message: "✓ no issues" },
172
+ case: { input: "Claims.case.ts", message: "check: OK" },
173
+ bpmn: { input: "Approval.bpmn.ts", message: "check: ok." }
174
+ };
175
+ var registerCheckCommand = (program, family) => {
176
+ const command = program.previewCommand("check <input>").description("Run the authoring-time SDK analyzer on source or an artifact.").option("--source", "Check authored TypeScript").option("--compiled", "Check the compiled artifact");
177
+ if (family === "flow") {
178
+ command.option("--library <dir>", "Connector library directory (defaults to the pulled registry; source checks also honor $FLOW_SDK_LIBRARY_JSON)").option("--json", "Print compiled-check diagnostics as JSON").option("--uip", "Resolve missing schemas with the UiPath CLI").option("--max-errors <count>", "Stop after this many compiled-check errors").option("--script-determinism", "Check script blocks for non-deterministic calls").option("--quiet", "Suppress warnings and information");
179
+ }
180
+ const example = CHECK_EXAMPLES[family];
181
+ command.examples(sdkCliExample(`Check a ${family} source file before compiling it`, `uip maestro ${family} check ${example.input} --source`, example.message)).trackedAction(processContext, async (input, options) => {
182
+ const argv = [input];
183
+ if (options.source)
184
+ argv.push("--source");
185
+ if (options.compiled)
186
+ argv.push("--compiled");
187
+ addValue(argv, "--library", await resolveLibraryOption(options.library));
188
+ if (options.json || getOutputFormatExplicit() && getOutputFormat() === "json")
189
+ argv.push("--json");
190
+ if (options.uip)
191
+ argv.push("--uip");
192
+ addValue(argv, "--max-errors", options.maxErrors);
193
+ if (options.scriptDeterminism)
194
+ argv.push("--script-determinism");
195
+ if (options.quiet)
196
+ argv.push("--quiet");
197
+ const code = await delegateToFlowSdk({
198
+ family,
199
+ commandVerb: "check",
200
+ argv
201
+ });
202
+ if (code !== 0)
203
+ processContext.exit(code);
204
+ });
205
+ };
206
+ // ../builder-sdk/src/commands/compile.ts
207
+ var COMPILE_EXAMPLES = {
208
+ flow: {
209
+ source: "Order.flow.ts",
210
+ output: "Order.flow",
211
+ message: "compile: wrote Order.flow (3 nodes, 2 edges)"
212
+ },
213
+ case: {
214
+ source: "Claims.case.ts",
215
+ output: "caseplan.json",
216
+ message: "compile: wrote caseplan.json (3 stage(s))"
217
+ },
218
+ bpmn: {
219
+ source: "Approval.bpmn.ts",
220
+ output: "Approval.bpmn",
221
+ message: "compile: wrote Approval.bpmn (4 element(s))"
222
+ }
223
+ };
224
+ var registerCompileCommand = (program, family) => {
225
+ const command = program.previewCommand("compile <source>").description(`Compile authored TypeScript to a ${family} artifact.`).option("-o, --output <file>", "Output artifact path").option("--library <dir>", "Connector library directory (defaults to the pulled registry)").option("--bindings <file>", "bindings.json path");
226
+ if (family !== "bpmn") {
227
+ command.option("--connectors-local <dir>", "Connection-resolved connector overlay");
228
+ }
229
+ if (family === "flow") {
230
+ command.option("--no-check", "Skip the source-level check");
231
+ }
232
+ const example = COMPILE_EXAMPLES[family];
233
+ command.examples(sdkCliExample(`Compile a ${family} source file to an artifact`, `uip maestro ${family} compile ${example.source} --output ${example.output}`, example.message)).trackedAction(processContext, async (source, options) => {
234
+ const argv = [source];
235
+ addValue(argv, "-o", options.output);
236
+ addValue(argv, "--library", await resolveLibraryOption(options.library));
237
+ addValue(argv, "--bindings", options.bindings);
238
+ addValue(argv, "--connectors-local", options.connectorsLocal);
239
+ if (options.check === false)
240
+ argv.push("--no-check");
241
+ const code = await delegateToFlowSdk({
242
+ family,
243
+ commandVerb: "compile",
244
+ argv
245
+ });
246
+ if (code !== 0)
247
+ processContext.exit(code);
248
+ });
249
+ };
250
+ // ../builder-sdk/src/commands/decompile.ts
251
+ var DECOMPILE_EXAMPLES = {
252
+ flow: {
253
+ input: "Order.flow",
254
+ output: "Order.flow.ts",
255
+ message: "flow-decompile: wrote Order.flow.ts"
256
+ },
257
+ case: {
258
+ input: "caseplan.json",
259
+ output: "Claims.case.ts",
260
+ message: "decompile: wrote Claims.case.ts"
261
+ }
262
+ };
263
+ var registerDecompileCommand = (program, family) => {
264
+ const command = program.previewCommand("decompile <input>").description(`Convert a ${family === "flow" ? ".flow" : "caseplan.json"} artifact to authored TypeScript.`).option("-o, --output <file>", `Output ${family === "flow" ? ".flow.ts" : ".case.ts"} path`).option("--import <specifier>", "SDK import specifier in generated source");
265
+ if (family === "flow") {
266
+ command.option("--strict", "Fail on unsupported constructs").option("--no-pipeline", "Do not emit a brownfield pipeline helper");
267
+ }
268
+ const example = DECOMPILE_EXAMPLES[family];
269
+ command.examples(sdkCliExample(`Convert a ${family} artifact back to authored TypeScript`, `uip maestro ${family} decompile ${example.input} --output ${example.output}`, example.message)).trackedAction(processContext, async (input, options) => {
270
+ const argv = [input];
271
+ addValue(argv, "-o", options.output);
272
+ addValue(argv, "--import", options.import);
273
+ if (options.strict)
274
+ argv.push("--strict");
275
+ if (options.pipeline === false)
276
+ argv.push("--no-pipeline");
277
+ const code = await delegateToFlowSdk({
278
+ family,
279
+ commandVerb: "decompile",
280
+ argv
281
+ });
282
+ if (code !== 0)
283
+ processContext.exit(code);
284
+ });
285
+ };
286
+ // src/commands/authoring.ts
287
+ var registerCaseAuthoringCommands = (program) => {
288
+ registerCompileCommand(program, "case");
289
+ registerCheckCommand(program, "case");
290
+ registerDecompileCommand(program, "case");
291
+ };
292
+ export {
293
+ registerCaseAuthoringCommands
294
+ };
295
+
296
+ //# debugId=847E8056C2AECFF464756E2164756E21
@@ -3,7 +3,7 @@ import {
3
3
  } from "./packager-tool-9qecd4wb.js";
4
4
  import {
5
5
  AUTH_CANCELLED_ERROR_CODE
6
- } from "./packager-tool-1ps2qeqg.js";
6
+ } from "./packager-tool-5arsyj36.js";
7
7
  import"./packager-tool-wckvcay0.js";
8
8
 
9
9
  // ../auth/src/strategies/browser-strategy.ts
@@ -0,0 +1,119 @@
1
+ import {
2
+ NugetPackager,
3
+ ensureProjectId
4
+ } from "./packager-tool-wvqz81mx.js";
5
+ import {
6
+ VALID_PACKAGE_NAME_REGEX,
7
+ loadCaseSchemaAsync
8
+ } from "./packager-tool-8f28ypk9.js";
9
+ import"./packager-tool-we1phz71.js";
10
+ import"./packager-tool-zqa5k9f7.js";
11
+ import {
12
+ catchError,
13
+ logger,
14
+ mapPackageMetadataOptions
15
+ } from "./packager-tool-zx48pq4v.js";
16
+ import"./packager-tool-cqrsre00.js";
17
+ import"./packager-tool-sc961w0q.js";
18
+ import"./packager-tool-1yy9x4vk.js";
19
+ import"./packager-tool-c23zrhj8.js";
20
+ import"./packager-tool-b098y4a2.js";
21
+ import"./packager-tool-9qecd4wb.js";
22
+ import"./packager-tool-qa9gftnj.js";
23
+ import {
24
+ getFileSystem
25
+ } from "./packager-tool-1cb0d5e0.js";
26
+ import"./packager-tool-5arsyj36.js";
27
+ import"./packager-tool-wckvcay0.js";
28
+
29
+ // src/services/case-pack-service.ts
30
+ class CasePackService {
31
+ fs;
32
+ constructor() {
33
+ this.fs = getFileSystem();
34
+ }
35
+ async execute(projectPath, options) {
36
+ const absoluteProjectPath = this.fs.path.resolve(projectPath);
37
+ const absoluteOutputPath = this.fs.path.resolve(options.output);
38
+ const packageName = options.name || this.fs.path.basename(projectPath);
39
+ if (!VALID_PACKAGE_NAME_REGEX.test(packageName)) {
40
+ throw new Error(`Invalid package name "${packageName}". Package name can only contain letters, numbers, dots (.), underscores (_), and hyphens (-).`);
41
+ }
42
+ logger.info(`
43
+ Packing Case project...
44
+ `);
45
+ logger.info("Details:");
46
+ logger.info(` Project: ${absoluteProjectPath}`);
47
+ logger.info(` Package: ${packageName}@${options.version}`);
48
+ logger.info(` Output: ${absoluteOutputPath}`);
49
+ logger.info("");
50
+ await this.validate(absoluteProjectPath);
51
+ await this.convertCaseToBpmnIfNeeded(absoluteProjectPath);
52
+ await ensureProjectId(absoluteProjectPath, this.fs);
53
+ await this.fs.mkdir(absoluteOutputPath);
54
+ let tempDir;
55
+ try {
56
+ tempDir = await this.fs.getTempDir();
57
+ const stagingDir = this.fs.path.join(tempDir, "case-pack-staging");
58
+ await this.fs.mkdir(stagingDir);
59
+ await this.fs.copyDirectory(absoluteProjectPath, this.fs.path.join(stagingDir, "content"));
60
+ const packageId = `${packageName}.case.Case`;
61
+ const version = options.version || "1.0.0";
62
+ const nupkgPath = this.fs.path.join(absoluteOutputPath, `${packageId}.${version}.nupkg`);
63
+ const packager = new NugetPackager(this.fs);
64
+ const result = await packager.packAsync(stagingDir, {
65
+ id: packageId,
66
+ version,
67
+ tags: "Case",
68
+ ...mapPackageMetadataOptions(options)
69
+ }, nupkgPath);
70
+ return {
71
+ packageName: `${packageName}@${options.version}`,
72
+ outputPath: result.outputPath
73
+ };
74
+ } finally {
75
+ if (tempDir) {
76
+ await catchError((async () => {
77
+ if (await this.fs.exists(tempDir)) {
78
+ await this.fs.rm(tempDir);
79
+ }
80
+ })());
81
+ }
82
+ }
83
+ }
84
+ async convertCaseToBpmnIfNeeded(projectPath) {
85
+ const caseFilePath = this.fs.path.join(projectPath, "caseplan.json");
86
+ if (!await this.fs.exists(caseFilePath)) {
87
+ return;
88
+ }
89
+ logger.info("Converting case JSON to BPMN...");
90
+ const caseContent = String(await this.fs.readFile(caseFilePath, "utf-8"));
91
+ const { serializeCaseDiskJsonToBpmnAndRulesJson } = await loadCaseSchemaAsync();
92
+ const { bpmnXml: bpmn } = await serializeCaseDiskJsonToBpmnAndRulesJson(caseContent);
93
+ const bpmnFilePath = this.fs.path.join(projectPath, "caseplan.json.bpmn");
94
+ await this.fs.writeFile(bpmnFilePath, bpmn);
95
+ logger.info(`BPMN file written to ${bpmnFilePath}`);
96
+ }
97
+ async validate(projectPath) {
98
+ if (!await this.fs.exists(projectPath)) {
99
+ throw new Error(`Project path does not exist: ${projectPath}`);
100
+ }
101
+ const stats = await this.fs.stat(projectPath);
102
+ if (!stats?.isDirectory()) {
103
+ throw new Error(`Project path must be a directory: ${projectPath}`);
104
+ }
105
+ const descriptorPath = this.fs.path.join(projectPath, "package-descriptor.json");
106
+ if (!await this.fs.exists(descriptorPath)) {
107
+ throw new Error(`Missing package-descriptor.json in: ${projectPath}`);
108
+ }
109
+ const operatePath = this.fs.path.join(projectPath, "operate.json");
110
+ if (!await this.fs.exists(operatePath)) {
111
+ throw new Error(`Missing operate.json in: ${projectPath}`);
112
+ }
113
+ }
114
+ }
115
+ export {
116
+ CasePackService
117
+ };
118
+
119
+ //# debugId=3F3DF77D1086226264756E2164756E21