@azure-tools/typespec-python 0.27.1 → 0.29.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/dist/scripts/regenerate.d.ts +2 -0
- package/dist/scripts/regenerate.d.ts.map +1 -0
- package/dist/scripts/regenerate.js +258 -0
- package/dist/scripts/regenerate.js.map +1 -0
- package/dist/scripts/run-python3.d.ts +2 -0
- package/dist/scripts/run-python3.d.ts.map +1 -0
- package/dist/scripts/run-python3.js +23 -0
- package/dist/scripts/run-python3.js.map +1 -0
- package/dist/scripts/run-tests.d.ts +2 -0
- package/dist/scripts/run-tests.d.ts.map +1 -0
- package/dist/scripts/run-tests.js +50 -0
- package/dist/scripts/run-tests.js.map +1 -0
- package/dist/scripts/system-requirements.d.ts +17 -0
- package/dist/scripts/system-requirements.d.ts.map +1 -0
- package/{scripts/system-requirements.cjs → dist/scripts/system-requirements.js} +80 -97
- package/dist/scripts/system-requirements.js.map +1 -0
- package/dist/src/code-model.d.ts.map +1 -1
- package/dist/src/code-model.js +29 -41
- package/dist/src/code-model.js.map +1 -1
- package/dist/src/emitter.js +1 -1
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/external-process.js +1 -1
- package/dist/src/external-process.js.map +1 -1
- package/dist/src/http.d.ts.map +1 -1
- package/dist/src/http.js +32 -17
- package/dist/src/http.js.map +1 -1
- package/dist/src/types.d.ts +9 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +56 -3
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils.d.ts +1 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +6 -8
- package/dist/src/utils.js.map +1 -1
- package/generator/pygen/codegen/models/__init__.py +2 -0
- package/generator/pygen/codegen/models/base.py +1 -1
- package/generator/pygen/codegen/models/code_model.py +2 -4
- package/generator/pygen/codegen/models/model_type.py +1 -2
- package/generator/pygen/codegen/models/operation.py +13 -16
- package/generator/pygen/codegen/models/parameter.py +6 -0
- package/generator/pygen/codegen/models/primitive_types.py +26 -0
- package/generator/pygen/codegen/models/property.py +1 -9
- package/generator/pygen/codegen/serializers/__init__.py +1 -1
- package/generator/pygen/codegen/serializers/builder_serializer.py +2 -2
- package/generator/pygen/codegen/serializers/general_serializer.py +0 -1
- package/generator/pygen/codegen/serializers/model_serializer.py +2 -0
- package/generator/pygen/codegen/serializers/sample_serializer.py +19 -12
- package/generator/pygen/codegen/templates/model_base.py.jinja2 +24 -18
- package/generator/pygen/codegen/templates/vendor.py.jinja2 +0 -2
- package/package.json +33 -39
- package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
- package/scripts/regenerate.ts +285 -0
- package/scripts/run-python3.ts +25 -0
- package/scripts/run-tests.ts +57 -0
- package/scripts/system-requirements.ts +253 -0
- package/scripts/run-python3.cjs +0 -22
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.d.ts","sourceRoot":"","sources":["../../scripts/regenerate.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { exec as execCallback } from "child_process";
|
|
3
|
+
import { promisify } from "util";
|
|
4
|
+
import yargs from "yargs";
|
|
5
|
+
import { hideBin } from "yargs/helpers";
|
|
6
|
+
import { dirname, join, relative, resolve } from "path";
|
|
7
|
+
import { promises } from "fs";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
// Promisify the exec function
|
|
10
|
+
const exec = promisify(execCallback);
|
|
11
|
+
// Get the directory of the current file
|
|
12
|
+
const PLUGIN_DIR = resolve(fileURLToPath(import.meta.url), "../../");
|
|
13
|
+
const CADL_RANCH_DIR = resolve(PLUGIN_DIR, "node_modules/@azure-tools/cadl-ranch-specs/http");
|
|
14
|
+
const EMITTER_OPTIONS = {
|
|
15
|
+
"resiliency/srv-driven/old.tsp": {
|
|
16
|
+
"package-name": "resiliency-srv-driven1",
|
|
17
|
+
"package-mode": "azure-dataplane",
|
|
18
|
+
"package-pprint-name": "ResiliencySrvDriven1",
|
|
19
|
+
},
|
|
20
|
+
"resiliency/srv-driven": {
|
|
21
|
+
"package-name": "resiliency-srv-driven2",
|
|
22
|
+
"package-mode": "azure-dataplane",
|
|
23
|
+
"package-pprint-name": "ResiliencySrvDriven2",
|
|
24
|
+
},
|
|
25
|
+
"authentication/http/custom": {
|
|
26
|
+
"package-name": "authentication-http-custom",
|
|
27
|
+
},
|
|
28
|
+
"authentication/union": {
|
|
29
|
+
"package-name": "authentication-union",
|
|
30
|
+
},
|
|
31
|
+
"type/array": {
|
|
32
|
+
"package-name": "typetest-array",
|
|
33
|
+
},
|
|
34
|
+
"type/dictionary": {
|
|
35
|
+
"package-name": "typetest-dictionary",
|
|
36
|
+
},
|
|
37
|
+
"type/enum/extensible": {
|
|
38
|
+
"package-name": "typetest-enum-extensible",
|
|
39
|
+
},
|
|
40
|
+
"type/enum/fixed": {
|
|
41
|
+
"package-name": "typetest-enum-fixed",
|
|
42
|
+
},
|
|
43
|
+
"type/model/empty": {
|
|
44
|
+
"package-name": "typetest-model-empty",
|
|
45
|
+
},
|
|
46
|
+
"type/model/flatten": {
|
|
47
|
+
"package-name": "typetest-model-flatten",
|
|
48
|
+
},
|
|
49
|
+
"type/model/inheritance/enum-discriminator": {
|
|
50
|
+
"package-name": "typetest-model-enumdiscriminator",
|
|
51
|
+
},
|
|
52
|
+
"type/model/inheritance/nested-discriminator": {
|
|
53
|
+
"package-name": "typetest-model-nesteddiscriminator",
|
|
54
|
+
},
|
|
55
|
+
"type/model/inheritance/not-discriminated": {
|
|
56
|
+
"package-name": "typetest-model-notdiscriminated",
|
|
57
|
+
},
|
|
58
|
+
"type/model/inheritance/single-discriminator": {
|
|
59
|
+
"package-name": "typetest-model-singlediscriminator",
|
|
60
|
+
},
|
|
61
|
+
"type/model/inheritance/recursive": {
|
|
62
|
+
"package-name": "typetest-model-recursive",
|
|
63
|
+
},
|
|
64
|
+
"type/model/usage": {
|
|
65
|
+
"package-name": "typetest-model-usage",
|
|
66
|
+
},
|
|
67
|
+
"type/model/visibility": [
|
|
68
|
+
{ "package-name": "typetest-model-visibility" },
|
|
69
|
+
{ "package-name": "headasbooleantrue", "head-as-boolean": "true" },
|
|
70
|
+
{ "package-name": "headasbooleanfalse", "head-as-boolean": "false" },
|
|
71
|
+
],
|
|
72
|
+
"type/property/nullable": {
|
|
73
|
+
"package-name": "typetest-property-nullable",
|
|
74
|
+
},
|
|
75
|
+
"type/property/optionality": {
|
|
76
|
+
"package-name": "typetest-property-optional",
|
|
77
|
+
},
|
|
78
|
+
"type/property/additional-properties": {
|
|
79
|
+
"package-name": "typetest-property-additionalproperties",
|
|
80
|
+
},
|
|
81
|
+
"type/scalar": {
|
|
82
|
+
"package-name": "typetest-scalar",
|
|
83
|
+
},
|
|
84
|
+
"type/property/value-types": {
|
|
85
|
+
"package-name": "typetest-property-valuetypes",
|
|
86
|
+
},
|
|
87
|
+
"type/union": {
|
|
88
|
+
"package-name": "typetest-union",
|
|
89
|
+
},
|
|
90
|
+
"azure/core/lro/rpc": {
|
|
91
|
+
"package-name": "azurecore-lro-rpc",
|
|
92
|
+
},
|
|
93
|
+
"client/structure/multi-client": {
|
|
94
|
+
"package-name": "client-structure-multiclient",
|
|
95
|
+
},
|
|
96
|
+
"client/structure/renamed-operation": {
|
|
97
|
+
"package-name": "client-structure-renamedoperation",
|
|
98
|
+
},
|
|
99
|
+
"client/structure/two-operation-group": {
|
|
100
|
+
"package-name": "client-structure-twooperationgroup",
|
|
101
|
+
},
|
|
102
|
+
"mgmt/sphere": [{ "package-name": "azure-mgmt-spheredpg" }],
|
|
103
|
+
};
|
|
104
|
+
function toPosix(dir) {
|
|
105
|
+
return dir.replace(/\\/g, "/");
|
|
106
|
+
}
|
|
107
|
+
function getEmitterOption(spec) {
|
|
108
|
+
const relativeSpec = toPosix(relative(CADL_RANCH_DIR, spec));
|
|
109
|
+
const key = relativeSpec.includes("resiliency/srv-driven/old.tsp") ? relativeSpec : dirname(relativeSpec);
|
|
110
|
+
const result = EMITTER_OPTIONS[key] || [{}];
|
|
111
|
+
return Array.isArray(result) ? result : [result];
|
|
112
|
+
}
|
|
113
|
+
// Function to execute CLI commands asynchronously
|
|
114
|
+
async function executeCommand(command) {
|
|
115
|
+
try {
|
|
116
|
+
const { stdout, stderr } = await exec(command);
|
|
117
|
+
if (stdout)
|
|
118
|
+
console.log(`stdout: ${stdout}`);
|
|
119
|
+
if (stderr)
|
|
120
|
+
console.error(`stderr: ${stderr}`);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`exec error: ${error}`);
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const SpecialFlags = {
|
|
128
|
+
azure: {
|
|
129
|
+
"generate-test": true,
|
|
130
|
+
"generate-sample": true,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
async function getSubdirectories(baseDir, flags) {
|
|
134
|
+
const subdirectories = [];
|
|
135
|
+
async function searchDir(currentDir) {
|
|
136
|
+
const items = await promises.readdir(currentDir, { withFileTypes: true });
|
|
137
|
+
const promisesArray = items.map(async (item) => {
|
|
138
|
+
const subDirPath = join(currentDir, item.name);
|
|
139
|
+
if (item.isDirectory()) {
|
|
140
|
+
const mainTspPath = join(subDirPath, "main.tsp");
|
|
141
|
+
const clientTspPath = join(subDirPath, "client.tsp");
|
|
142
|
+
const mainTspRelativePath = toPosix(relative(baseDir, mainTspPath));
|
|
143
|
+
if (flags.flavor === "unbranded" && mainTspRelativePath.includes("azure"))
|
|
144
|
+
return;
|
|
145
|
+
// after xml support, remove this check
|
|
146
|
+
if (mainTspRelativePath.includes("xml"))
|
|
147
|
+
return;
|
|
148
|
+
// after fix test generation for nested operation group, remove this check
|
|
149
|
+
if (mainTspRelativePath.includes("client-operation-group"))
|
|
150
|
+
return;
|
|
151
|
+
const hasMainTsp = await promises
|
|
152
|
+
.access(mainTspPath)
|
|
153
|
+
.then(() => true)
|
|
154
|
+
.catch(() => false);
|
|
155
|
+
const hasClientTsp = await promises
|
|
156
|
+
.access(clientTspPath)
|
|
157
|
+
.then(() => true)
|
|
158
|
+
.catch(() => false);
|
|
159
|
+
if (mainTspRelativePath.toLowerCase().includes(flags.name || "")) {
|
|
160
|
+
if (mainTspRelativePath.includes("resiliency/srv-driven")) {
|
|
161
|
+
subdirectories.push(resolve(subDirPath, "old.tsp"));
|
|
162
|
+
}
|
|
163
|
+
if (hasClientTsp) {
|
|
164
|
+
subdirectories.push(resolve(subDirPath, "client.tsp"));
|
|
165
|
+
}
|
|
166
|
+
else if (hasMainTsp) {
|
|
167
|
+
subdirectories.push(resolve(subDirPath, "main.tsp"));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Recursively search in the subdirectory
|
|
171
|
+
await searchDir(subDirPath);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
await Promise.all(promisesArray);
|
|
175
|
+
}
|
|
176
|
+
await searchDir(baseDir);
|
|
177
|
+
return subdirectories;
|
|
178
|
+
}
|
|
179
|
+
function defaultPackageName(spec) {
|
|
180
|
+
return toPosix(relative(CADL_RANCH_DIR, dirname(spec)))
|
|
181
|
+
.replace(/\//g, "-")
|
|
182
|
+
.toLowerCase();
|
|
183
|
+
}
|
|
184
|
+
function addOptions(spec, generatedFolder, flags) {
|
|
185
|
+
const emitterConfigs = [];
|
|
186
|
+
for (const config of getEmitterOption(spec)) {
|
|
187
|
+
const options = { ...config };
|
|
188
|
+
options["flavor"] = flags.flavor;
|
|
189
|
+
for (const [k, v] of Object.entries(SpecialFlags[flags.flavor] ?? {})) {
|
|
190
|
+
options[k] = v;
|
|
191
|
+
}
|
|
192
|
+
if (options["emitter-output-dir"] === undefined) {
|
|
193
|
+
const packageName = options["package-name"] || defaultPackageName(spec);
|
|
194
|
+
options["emitter-output-dir"] = toPosix(`${generatedFolder}/test/${flags.flavor}/generated/${packageName}`);
|
|
195
|
+
}
|
|
196
|
+
if (flags.debug) {
|
|
197
|
+
options["debug"] = "true";
|
|
198
|
+
}
|
|
199
|
+
if (flags.flavor === "unbranded") {
|
|
200
|
+
options["company-name"] = "Unbranded";
|
|
201
|
+
}
|
|
202
|
+
options["examples-directory"] = toPosix(join(dirname(spec), "examples"));
|
|
203
|
+
const configs = Object.entries(options).flatMap(([k, v]) => {
|
|
204
|
+
return `--option @azure-tools/typespec-python.${k}=${v}`;
|
|
205
|
+
});
|
|
206
|
+
emitterConfigs.push(configs.join(" "));
|
|
207
|
+
}
|
|
208
|
+
return emitterConfigs;
|
|
209
|
+
}
|
|
210
|
+
async function _regenerateSingle(spec, flags) {
|
|
211
|
+
// Perform some asynchronous operation here
|
|
212
|
+
const options = addOptions(spec, PLUGIN_DIR, flags);
|
|
213
|
+
const commandPromises = options.map((option) => {
|
|
214
|
+
const command = `tsp compile ${spec} --emit=${toPosix(PLUGIN_DIR)} ${option}`;
|
|
215
|
+
console.log(command);
|
|
216
|
+
return executeCommand(command);
|
|
217
|
+
});
|
|
218
|
+
await Promise.all(commandPromises);
|
|
219
|
+
}
|
|
220
|
+
async function regenerate(flags) {
|
|
221
|
+
if (flags.flavor === undefined) {
|
|
222
|
+
const azureGeneration = await regenerate({ ...flags, flavor: "azure" });
|
|
223
|
+
const unbrandedGeneration = await regenerate({ ...flags, flavor: "unbranded" });
|
|
224
|
+
return azureGeneration && unbrandedGeneration;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const flagsResolved = { debug: false, flavor: flags.flavor, ...flags };
|
|
228
|
+
const CADL_RANCH_DIR = resolve(PLUGIN_DIR, "node_modules/@azure-tools/cadl-ranch-specs/http");
|
|
229
|
+
const subdirectories = await getSubdirectories(CADL_RANCH_DIR, flagsResolved);
|
|
230
|
+
const promises = subdirectories.map(async (subdirectory) => {
|
|
231
|
+
// Perform additional asynchronous operations on each subdirectory here
|
|
232
|
+
await _regenerateSingle(subdirectory, flagsResolved);
|
|
233
|
+
});
|
|
234
|
+
await Promise.all(promises);
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// PARSE INPUT ARGUMENTS
|
|
239
|
+
const argv = yargs(hideBin(process.argv))
|
|
240
|
+
.option("flavor", {
|
|
241
|
+
type: "string",
|
|
242
|
+
choices: ["azure", "unbranded"],
|
|
243
|
+
description: "Specify the flavor",
|
|
244
|
+
})
|
|
245
|
+
.option("debug", {
|
|
246
|
+
alias: "d",
|
|
247
|
+
type: "boolean",
|
|
248
|
+
description: "Debug mode",
|
|
249
|
+
})
|
|
250
|
+
.option("name", {
|
|
251
|
+
alias: "n",
|
|
252
|
+
type: "string",
|
|
253
|
+
description: "Specify filename if you only want to generate a subset",
|
|
254
|
+
}).argv;
|
|
255
|
+
regenerate(argv)
|
|
256
|
+
.then(() => console.log("Regeneration successful"))
|
|
257
|
+
.catch((error) => console.error(`Regeneration failed: ${error.message}`));
|
|
258
|
+
//# sourceMappingURL=regenerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../scripts/regenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-python3.d.ts","sourceRoot":"","sources":["../../scripts/run-python3.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// This script wraps logic in @azure-tools/extension to resolve
|
|
2
|
+
// the path to Python 3 so that a Python script file can be run
|
|
3
|
+
// from an npm script in package.json. It uses the same Python 3
|
|
4
|
+
// path resolution algorithm as AutoRest so that the behavior
|
|
5
|
+
// is fully consistent (and also supports AUTOREST_PYTHON_EXE).
|
|
6
|
+
//
|
|
7
|
+
// Invoke it like so: "tsx run-python3.ts script.py"
|
|
8
|
+
import cp from "child_process";
|
|
9
|
+
import { patchPythonPath } from "./system-requirements.js";
|
|
10
|
+
async function runPython3(...args) {
|
|
11
|
+
const command = await patchPythonPath(["python", ...args], {
|
|
12
|
+
version: ">=3.8",
|
|
13
|
+
environmentVariable: "AUTOREST_PYTHON_EXE",
|
|
14
|
+
});
|
|
15
|
+
cp.execSync(command.join(" "), {
|
|
16
|
+
stdio: [0, 1, 2],
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
runPython3(...process.argv.slice(2)).catch((err) => {
|
|
20
|
+
console.error(err.toString()); // eslint-disable-line no-console
|
|
21
|
+
process.exit(1);
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=run-python3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-python3.js","sourceRoot":"","sources":["../../scripts/run-python3.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,iEAAiE;AACjE,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,oDAAoD;AAEpD,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,KAAK,UAAU,UAAU,CAAC,GAAG,IAAc;IACvC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE;QACvD,OAAO,EAAE,OAAO;QAChB,mBAAmB,EAAE,qBAAqB;KAC7C,CAAC,CAAC;IACH,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC3B,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KACnB,CAAC,CAAC;AACP,CAAC;AAED,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,iCAAiC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.d.ts","sourceRoot":"","sources":["../../scripts/run-tests.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import yargs from "yargs";
|
|
4
|
+
import { hideBin } from "yargs/helpers";
|
|
5
|
+
const validFolders = ["azure", "unbranded"];
|
|
6
|
+
const validCommands = ["ci", "lint", "mypy", "pyright", "apiview"];
|
|
7
|
+
// Parse command-line arguments using yargs
|
|
8
|
+
const argv = yargs(hideBin(process.argv))
|
|
9
|
+
.option("folder", {
|
|
10
|
+
alias: "f",
|
|
11
|
+
describe: "Specify the folder to use",
|
|
12
|
+
choices: validFolders,
|
|
13
|
+
type: "string",
|
|
14
|
+
})
|
|
15
|
+
.option("command", {
|
|
16
|
+
alias: "c",
|
|
17
|
+
describe: "Specify the command to run",
|
|
18
|
+
choices: validCommands,
|
|
19
|
+
type: "string",
|
|
20
|
+
}).argv;
|
|
21
|
+
const foldersToProcess = argv.folder ? [argv.folder] : validFolders;
|
|
22
|
+
const commandToRun = argv.command || "all";
|
|
23
|
+
function getCommand(command, folder) {
|
|
24
|
+
if (!validCommands.includes(command))
|
|
25
|
+
throw new Error(`Unknown command '${command}'.`);
|
|
26
|
+
return `FOLDER=${folder} tox -c ./test/${folder}/tox.ini -e ${command}`;
|
|
27
|
+
}
|
|
28
|
+
foldersToProcess.forEach((folder) => {
|
|
29
|
+
try {
|
|
30
|
+
if (commandToRun === "all") {
|
|
31
|
+
for (const key of validCommands) {
|
|
32
|
+
console.log(`Running ${key} for folder ${folder}...`);
|
|
33
|
+
execSync(getCommand(key, folder), { stdio: "inherit" });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else if (getCommand(commandToRun, folder)) {
|
|
37
|
+
console.log(`Running ${commandToRun} for folder ${folder}...`);
|
|
38
|
+
execSync(getCommand(commandToRun, folder), { stdio: "inherit" });
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.error(`Error: Unknown command '${commandToRun}'.`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error(`Error executing command for folder ${folder}: ${error.message}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=run-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-tests.js","sourceRoot":"","sources":["../../scripts/run-tests.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAE5C,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEnE,2CAA2C;AAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACpC,MAAM,CAAC,QAAQ,EAAE;IACd,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,2BAA2B;IACrC,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,QAAQ;CACjB,CAAC;KACD,MAAM,CAAC,SAAS,EAAE;IACf,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,aAAa;IACtB,IAAI,EAAE,QAAQ;CACjB,CAAC,CAAC,IAAiB,CAAC;AAEzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAEpE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;AAE3C,SAAS,UAAU,CAAC,OAAe,EAAE,MAAc;IAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;IACvF,OAAO,UAAU,MAAM,kBAAkB,MAAM,eAAe,OAAO,EAAE,CAAC;AAC5E,CAAC;AAED,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IAChC,IAAI;QACA,IAAI,YAAY,KAAK,KAAK,EAAE;YACxB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,eAAe,MAAM,KAAK,CAAC,CAAC;gBACtD,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;aAC3D;SACJ;aAAM,IAAI,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE;YACzC,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,eAAe,MAAM,KAAK,CAAC,CAAC;YAC/D,QAAQ,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SACpE;aAAM;YACH,OAAO,CAAC,KAAK,CAAC,2BAA2B,YAAY,IAAI,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;KACJ;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,sCAAsC,MAAM,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param command list of the command and arguments. First item in array must be a python exe @see KnownPythonExe. (e.g. ["python", "mypythonfile.py"]
|
|
3
|
+
* @param requirement
|
|
4
|
+
*/
|
|
5
|
+
export declare const patchPythonPath: (command: PythonCommandLine, requirement: SystemRequirement) => Promise<string[]>;
|
|
6
|
+
type KnownPythonExe = "python.exe" | "python3.exe" | "python" | "python3";
|
|
7
|
+
type PythonCommandLine = [KnownPythonExe, ...string[]];
|
|
8
|
+
interface SystemRequirement {
|
|
9
|
+
version?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Name of an environment variable where the user could provide the path to the exe.
|
|
12
|
+
* @example "AUTOREST_PYTHON_PATH"
|
|
13
|
+
*/
|
|
14
|
+
environmentVariable?: string;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=system-requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-requirements.d.ts","sourceRoot":"","sources":["../../scripts/system-requirements.ts"],"names":[],"mappings":"AAgLA;;;GAGG;AACH,eAAO,MAAM,eAAe,4CAEX,iBAAiB,KAC/B,QAAQ,MAAM,EAAE,CAOlB,CAAC;AAOF,KAAK,cAAc,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC1E,KAAK,iBAAiB,GAAG,CAAC,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAQvD,UAAU,iBAAiB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC"}
|