@azure/api-management-custom-widgets-scaffolder 1.0.0-alpha.20241029.1 → 1.0.0-alpha.20241030.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/bin/execute.cjs.map +1 -1
- package/dist/commonjs/bin/execute-configs.d.ts +1 -1
- package/dist/commonjs/bin/execute-configs.d.ts.map +1 -1
- package/dist/commonjs/bin/execute-configs.js.map +1 -1
- package/dist/commonjs/bin/execute-helpers.d.ts +2 -2
- package/dist/commonjs/bin/execute-helpers.d.ts.map +1 -1
- package/dist/commonjs/bin/execute-helpers.js.map +1 -1
- package/dist/commonjs/bin/execute.js.map +1 -1
- package/dist/commonjs/generateProject.d.ts +1 -1
- package/dist/commonjs/generateProject.d.ts.map +1 -1
- package/dist/commonjs/generateProject.js.map +1 -1
- package/dist/commonjs/getTemplates.d.ts +1 -1
- package/dist/commonjs/getTemplates.d.ts.map +1 -1
- package/dist/commonjs/getTemplates.js.map +1 -1
- package/dist/esm/bin/execute-configs.d.ts +1 -1
- package/dist/esm/bin/execute-configs.d.ts.map +1 -1
- package/dist/esm/bin/execute-configs.js +1 -1
- package/dist/esm/bin/execute-configs.js.map +1 -1
- package/dist/esm/bin/execute-helpers.d.ts +2 -2
- package/dist/esm/bin/execute-helpers.d.ts.map +1 -1
- package/dist/esm/bin/execute-helpers.js +1 -1
- package/dist/esm/bin/execute-helpers.js.map +1 -1
- package/dist/esm/bin/execute.js.map +1 -1
- package/dist/esm/generateProject.d.ts +1 -1
- package/dist/esm/generateProject.d.ts.map +1 -1
- package/dist/esm/generateProject.js.map +1 -1
- package/dist/esm/getTemplates.d.ts +1 -1
- package/dist/esm/getTemplates.d.ts.map +1 -1
- package/dist/esm/getTemplates.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Configs, ServiceInformation, Options, WidgetConfig } from "../scaffolding.js";
|
|
1
|
+
import type { Configs, ServiceInformation, Options, WidgetConfig } from "../scaffolding.js";
|
|
2
2
|
export declare const fieldIdToName: Record<keyof (WidgetConfig & ServiceInformation & Options) | string, string>;
|
|
3
3
|
export declare const prefixUrlProtocol: (value: string) => string;
|
|
4
4
|
export type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-configs.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute-configs.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5F,eAAO,MAAM,aAAa,EAAE,MAAM,CAChC,MAAM,CAAC,YAAY,GAAG,kBAAkB,GAAG,OAAO,CAAC,GAAG,MAAM,EAC5D,MAAM,CAcP,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,KAAG,MACM,CAAC;AAwBzD,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;KACvE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,IAAI,4BAA4B,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAEvF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,YAAY,CAevD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,kBAAkB,CAY7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAYhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAmB,OAAO,CAAC,YAAY,CAAC,KAAG,OAAO,CAAC,YAAY,CAwB7F,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,OAAO,CAAC,kBAAkB,CAAC,KACnC,OAAO,CAAC,kBAAkB,CAkC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAAmB,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,OAAO,CAiCjF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-configs.js","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Configs,\n ServiceInformation,\n Options,\n TECHNOLOGIES,\n WidgetConfig,\n} from \"../scaffolding.js\";\n\nexport const fieldIdToName: Record<\n keyof (WidgetConfig & ServiceInformation & Options) | string,\n string\n> = {\n displayName: \"Widget display name\",\n technology: \"Technology\",\n iconUrl: \"iconUrl\",\n\n resourceId:\n \"Azure API Management resource ID (following format: subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ApiManagement/service/<api-management service-name>)\",\n managementApiEndpoint: \"Management API hostname\",\n apiVersion: \"Management API version\",\n\n openUrl: \"Developer portal URL\",\n configAdvancedTenantId: \"Tenant ID\",\n configAdvancedRedirectUri: \"Redirect URI\",\n};\n\nexport const prefixUrlProtocol = (value: string): string =>\n /https?:\\/\\//.test(value) ? value : `https://${value}`;\n\nconst validateRequired =\n (name: string, msg: string = `The “${name}” parameter is required.`) =>\n (input: unknown) =>\n (input != null && input !== \"\") || msg;\n\nconst validateUrl =\n (\n name: string,\n msg = (input: string) =>\n `Provided “${name}” parameter value (“${prefixUrlProtocol(\n input,\n )}”) isn’t a valid URL. Use the correct URL format, e.g., https://contoso.com.`,\n ) =>\n (input: string) => {\n try {\n new URL(prefixUrlProtocol(input));\n return true;\n } catch (e) {\n return msg(prefixUrlProtocol(input));\n }\n };\n\nexport type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {\n [Key in keyof T]: T[Key] extends undefined ? V | undefined : V;\n};\n\nexport type ValidateFnc = (input: string) => boolean | string;\nexport type Validate<C extends Configs> = ReplaceTypesPreserveOptional<C, ValidateFnc>;\n\nexport const validateWidgetConfig: Validate<WidgetConfig> = {\n displayName: validateRequired(fieldIdToName.displayName),\n technology: (input) => {\n const required = validateRequired(fieldIdToName.technology)(input);\n if (required !== true) return required;\n\n if (TECHNOLOGIES.includes(input as any)) {\n return true;\n } else {\n return (\n \"Provided “technology” parameter value isn’t correct. Use one of the following: \" +\n TECHNOLOGIES.join(\", \")\n );\n }\n },\n};\n\nexport const validateDeployConfig: Validate<ServiceInformation> = {\n resourceId: (input) => {\n const required = validateRequired(fieldIdToName.resourceId)(input);\n if (required !== true) return required;\n\n const regex =\n /^\\/?subscriptions\\/[^/]+\\/resourceGroups\\/[^/]+\\/providers\\/Microsoft\\.ApiManagement\\/service\\/[^/]+\\/?$/;\n return input === \"test\" || regex.test(input)\n ? true\n : \"Resource ID needs to be a valid Azure resource ID. For example, subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso-group/providers/Microsoft.ApiManagement/service/contoso-apis.\";\n },\n managementApiEndpoint: (input) => validateRequired(fieldIdToName.managementApiEndpoint)(input),\n};\n\nexport const validateMiscConfig: Validate<Options> = {\n openUrl: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n configAdvancedTenantId: () => {\n return true;\n },\n configAdvancedRedirectUri: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n};\n\nexport const promptWidgetConfig = async (partial: Partial<WidgetConfig>): Promise<WidgetConfig> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"displayName\",\n type: \"input\",\n message: fieldIdToName.displayName,\n validate: validateWidgetConfig.displayName,\n },\n {\n name: \"technology\",\n type: \"list\",\n message: fieldIdToName.technology,\n choices: [\n { name: \"React\", value: \"react\" },\n { name: \"Vue\", value: \"vue\" },\n { name: \"TypeScript\", value: \"typescript\" },\n ],\n },\n ],\n partial,\n );\n};\n\nexport const promptServiceInformation = async (\n partial: Partial<ServiceInformation>,\n): Promise<ServiceInformation> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"resourceId\",\n type: \"input\",\n message: fieldIdToName.resourceId,\n validate: validateDeployConfig.resourceId,\n },\n {\n name: \"managementApiEndpoint\",\n type: \"list\",\n message: fieldIdToName.managementApiEndpoint,\n choices: [\n {\n name: \"management.azure.com (if you're not sure what to select, use this option)\",\n value: \"management.azure.com\",\n },\n { name: \"management.usgovcloudapi.net\", value: \"management.usgovcloudapi.net\" },\n { name: \"management.chinacloudapi.cn\", value: \"management.chinacloudapi.cn\" },\n ],\n transformer: prefixUrlProtocol,\n validate: validateDeployConfig.managementApiEndpoint,\n },\n {\n name: \"apiVersion\",\n type: \"input\",\n message: fieldIdToName.apiVersion + \" (optional; e.g., 2021-08-01)\",\n },\n ],\n partial,\n );\n};\n\nexport const promptMiscConfig = async (partial: Partial<Options>): Promise<Options> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"openUrl\",\n type: \"input\",\n message:\n fieldIdToName.openUrl +\n \" for widget development and testing (optional; e.g., https://contoso.developer.azure-api.net/ or http://localhost:8080)\",\n transformer: prefixUrlProtocol,\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedTenantId\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedTenantId +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional)\",\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedRedirectUri\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedRedirectUri +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional; default is http://localhost:1337)\",\n validate: validateMiscConfig.openUrl,\n },\n ],\n partial,\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"execute-configs.js","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Configs, ServiceInformation, Options, WidgetConfig } from \"../scaffolding.js\";\nimport { TECHNOLOGIES } from \"../scaffolding.js\";\n\nexport const fieldIdToName: Record<\n keyof (WidgetConfig & ServiceInformation & Options) | string,\n string\n> = {\n displayName: \"Widget display name\",\n technology: \"Technology\",\n iconUrl: \"iconUrl\",\n\n resourceId:\n \"Azure API Management resource ID (following format: subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ApiManagement/service/<api-management service-name>)\",\n managementApiEndpoint: \"Management API hostname\",\n apiVersion: \"Management API version\",\n\n openUrl: \"Developer portal URL\",\n configAdvancedTenantId: \"Tenant ID\",\n configAdvancedRedirectUri: \"Redirect URI\",\n};\n\nexport const prefixUrlProtocol = (value: string): string =>\n /https?:\\/\\//.test(value) ? value : `https://${value}`;\n\nconst validateRequired =\n (name: string, msg: string = `The “${name}” parameter is required.`) =>\n (input: unknown) =>\n (input != null && input !== \"\") || msg;\n\nconst validateUrl =\n (\n name: string,\n msg = (input: string) =>\n `Provided “${name}” parameter value (“${prefixUrlProtocol(\n input,\n )}”) isn’t a valid URL. Use the correct URL format, e.g., https://contoso.com.`,\n ) =>\n (input: string) => {\n try {\n new URL(prefixUrlProtocol(input));\n return true;\n } catch (e) {\n return msg(prefixUrlProtocol(input));\n }\n };\n\nexport type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {\n [Key in keyof T]: T[Key] extends undefined ? V | undefined : V;\n};\n\nexport type ValidateFnc = (input: string) => boolean | string;\nexport type Validate<C extends Configs> = ReplaceTypesPreserveOptional<C, ValidateFnc>;\n\nexport const validateWidgetConfig: Validate<WidgetConfig> = {\n displayName: validateRequired(fieldIdToName.displayName),\n technology: (input) => {\n const required = validateRequired(fieldIdToName.technology)(input);\n if (required !== true) return required;\n\n if (TECHNOLOGIES.includes(input as any)) {\n return true;\n } else {\n return (\n \"Provided “technology” parameter value isn’t correct. Use one of the following: \" +\n TECHNOLOGIES.join(\", \")\n );\n }\n },\n};\n\nexport const validateDeployConfig: Validate<ServiceInformation> = {\n resourceId: (input) => {\n const required = validateRequired(fieldIdToName.resourceId)(input);\n if (required !== true) return required;\n\n const regex =\n /^\\/?subscriptions\\/[^/]+\\/resourceGroups\\/[^/]+\\/providers\\/Microsoft\\.ApiManagement\\/service\\/[^/]+\\/?$/;\n return input === \"test\" || regex.test(input)\n ? true\n : \"Resource ID needs to be a valid Azure resource ID. For example, subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso-group/providers/Microsoft.ApiManagement/service/contoso-apis.\";\n },\n managementApiEndpoint: (input) => validateRequired(fieldIdToName.managementApiEndpoint)(input),\n};\n\nexport const validateMiscConfig: Validate<Options> = {\n openUrl: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n configAdvancedTenantId: () => {\n return true;\n },\n configAdvancedRedirectUri: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n};\n\nexport const promptWidgetConfig = async (partial: Partial<WidgetConfig>): Promise<WidgetConfig> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"displayName\",\n type: \"input\",\n message: fieldIdToName.displayName,\n validate: validateWidgetConfig.displayName,\n },\n {\n name: \"technology\",\n type: \"list\",\n message: fieldIdToName.technology,\n choices: [\n { name: \"React\", value: \"react\" },\n { name: \"Vue\", value: \"vue\" },\n { name: \"TypeScript\", value: \"typescript\" },\n ],\n },\n ],\n partial,\n );\n};\n\nexport const promptServiceInformation = async (\n partial: Partial<ServiceInformation>,\n): Promise<ServiceInformation> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"resourceId\",\n type: \"input\",\n message: fieldIdToName.resourceId,\n validate: validateDeployConfig.resourceId,\n },\n {\n name: \"managementApiEndpoint\",\n type: \"list\",\n message: fieldIdToName.managementApiEndpoint,\n choices: [\n {\n name: \"management.azure.com (if you're not sure what to select, use this option)\",\n value: \"management.azure.com\",\n },\n { name: \"management.usgovcloudapi.net\", value: \"management.usgovcloudapi.net\" },\n { name: \"management.chinacloudapi.cn\", value: \"management.chinacloudapi.cn\" },\n ],\n transformer: prefixUrlProtocol,\n validate: validateDeployConfig.managementApiEndpoint,\n },\n {\n name: \"apiVersion\",\n type: \"input\",\n message: fieldIdToName.apiVersion + \" (optional; e.g., 2021-08-01)\",\n },\n ],\n partial,\n );\n};\n\nexport const promptMiscConfig = async (partial: Partial<Options>): Promise<Options> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"openUrl\",\n type: \"input\",\n message:\n fieldIdToName.openUrl +\n \" for widget development and testing (optional; e.g., https://contoso.developer.azure-api.net/ or http://localhost:8080)\",\n transformer: prefixUrlProtocol,\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedTenantId\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedTenantId +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional)\",\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedRedirectUri\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedRedirectUri +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional; default is http://localhost:1337)\",\n validate: validateMiscConfig.openUrl,\n },\n ],\n partial,\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from "./execute-configs.js";
|
|
2
|
-
import { Configs } from "../scaffolding.js";
|
|
1
|
+
import type { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from "./execute-configs.js";
|
|
2
|
+
import type { Configs } from "../scaffolding.js";
|
|
3
3
|
import yargsParser from "yargs-parser";
|
|
4
4
|
export declare const extractConfigFromArgs: <TConfig extends Configs>(argv: yargsParser.Arguments, validateConfig: Validate<TConfig>, red: (msg: string) => void) => {
|
|
5
5
|
configPartial: Partial<TConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-helpers.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute-helpers.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,4BAA4B,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEhG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,eAAO,MAAM,qBAAqB,GAAI,OAAO,SAAS,OAAO,QACrD,WAAW,CAAC,SAAS,kBACX,QAAQ,CAAC,OAAO,CAAC,OAC5B,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KACzB;IAAE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAuBrD,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AACxC,KAAK,MAAM,GAAG,CAAC,CAAC,SAAS,OAAO,EAC9B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACpD,cAAc,EAAE,4BAA4B,CAAC,CAAC,EAAE,WAAW,CAAC,KACzD,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,eAAO,MAAM,cAAc,SAAU,GAAG,OAAO,GAAG,KAAG,MAkBpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-helpers.js","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;
|
|
1
|
+
{"version":3,"file":"execute-helpers.js","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;;AAGlC,6DAAqD;AAErD,2CAAwC;AACxC,wEAAuC;AAEhC,MAAM,qBAAqB,GAAG,CACnC,IAA2B,EAC3B,cAAiC,EACjC,GAA0B,EAC6B,EAAE;IACzD,MAAM,aAAa,GAAqB,EAAE,CAAC;IAC3C,IAAI,OAAO,GAAY,KAAK,CAAC;IAE7B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,CAAgB,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,aAAa,CAAC,GAAkC,CAAC,GAAG,KAAK,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,IAAI,KAAK,+BAA+B,GAAG,GAAG,CAAC,CAAC;YACpD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AA3BW,QAAA,qBAAqB,yBA2BhC;AAQK,MAAM,cAAc,GAAG,CAAC,IAAS,EAAE,GAAQ,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAG,IAAA,sBAAW,EAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,KAAK,EACV,eAAoD,EACpD,cAA2B,EAC3B,EAAE;QACF,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAA,6BAAqB,EAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAEpF,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CACnC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,WAAC,OAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,MAAA,kCAAa,CAAC,GAAG,CAAC,mCAAI,GAAG,KAAK,KAAK,EAAE,CAAC,CAAA,EAAA,CAClF,CAAC;YACF,OAAO,aAAkB,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,cAAc,kBAkBzB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from \"./execute-configs.js\";\nimport { fieldIdToName } from \"./execute-configs.js\";\nimport type { Configs } from \"../scaffolding.js\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargsParser from \"yargs-parser\";\n\nexport const extractConfigFromArgs = <TConfig extends Configs>(\n argv: yargsParser.Arguments,\n validateConfig: Validate<TConfig>,\n red: (msg: string) => void,\n): { configPartial: Partial<TConfig>; missing: boolean } => {\n const configPartial: Partial<TConfig> = {};\n let missing: boolean = false;\n\n Object.entries(validateConfig).forEach(([key, v]) => {\n const validate = v as ValidateFnc;\n const value = argv[key];\n const response = validate(value);\n\n if (response === true) {\n if (value !== null && value !== undefined) {\n configPartial[key as keyof typeof validateConfig] = value;\n }\n } else if (value === null || value === undefined) {\n missing = true;\n } else {\n missing = true;\n red(`\"${value}\" is not a valid value for \"${key}\"`);\n if (typeof response === \"string\") red(response);\n }\n });\n\n return { configPartial, missing };\n};\n\nexport type Log = (msg: string) => void;\ntype Config = <C extends Configs>(\n promptForConfig: (partial: Partial<C>) => Promise<C>,\n validateConfig: ReplaceTypesPreserveOptional<C, ValidateFnc>,\n) => Promise<C>;\n\nexport const buildGetConfig = (gray: Log, red: Log): Config => {\n const argv = yargsParser(hideBin(process.argv));\n return async <C extends Configs>(\n promptForConfig: (partial: Partial<C>) => Promise<C>,\n validateConfig: Validate<C>,\n ) => {\n const { configPartial, missing } = extractConfigFromArgs(argv, validateConfig, red);\n\n if (missing || !Object.values(configPartial).length) {\n return promptForConfig(configPartial);\n } else {\n gray(\"Retrieved from the command parameters\");\n Object.entries(configPartial).forEach(\n ([key, value]) => value != null && gray(`${fieldIdToName[key] ?? key}: ${value}`),\n );\n return configPartial as C;\n }\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/bin/execute.ts"],"names":[],"mappings":";;AAEA,uCAAuC;AACvC,kCAAkC;;;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/bin/execute.ts"],"names":[],"mappings":";;AAEA,uCAAuC;AACvC,kCAAkC;;;AAGlC,6DAAsD;AACtD,6DAQ8B;AAC9B,0DAA0B;AAC1B,8DAAwD;AAExD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AACxB,MAAM,KAAK,GAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,KAAK,GAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,MAAM,GAAG,GAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,MAAM,IAAI,GAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhD,KAAK,UAAU,IAAI;IACjB,KAAK,CACH,sKAAsK,CACvK,CAAC;IAEF,MAAM,SAAS,GAAG,IAAA,mCAAc,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE5C,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,uCAAkB,EAAE,yCAAoB,CAAC,CAAC;IAC/E,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,6CAAwB,EAAE,yCAAoB,CAAC,CAAC;IAC3F,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,qCAAgB,EAAE,uCAAkB,CAAC,CAAC;IAEzE,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC7C,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACpD,kBAAkB,CAAC,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,kBAAkB,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;QACzC,OAAO,kBAAkB,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,qBAAqB,GAAG,IAAA,sCAAiB,EAC1D,kBAAkB,CAAC,qBAAqB,CACzC,CAAC;IAEF,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO;QACrC,CAAC,CAAC,IAAA,sCAAiB,EAAC,UAAU,CAAC,OAAO,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;IAEvB,OAAO,IAAA,oCAAe,EAAC,YAAY,EAAE,kBAAkB,EAAE,UAAU,CAAC;SACjE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;SAC3F,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC3B,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Log } from \"./execute-helpers.js\";\nimport { buildGetConfig } from \"./execute-helpers.js\";\nimport {\n prefixUrlProtocol,\n promptServiceInformation,\n promptMiscConfig,\n promptWidgetConfig,\n validateDeployConfig,\n validateMiscConfig,\n validateWidgetConfig,\n} from \"./execute-configs.js\";\nimport chalk from \"chalk\";\nimport { generateProject } from \"../generateProject.js\";\n\nconst log = console.log;\nconst white: Log = (msg) => log(chalk.white(msg));\nconst green: Log = (msg) => log(chalk.green(msg));\nconst red: Log = (msg) => log(chalk.red(msg));\nconst gray: Log = (msg) => log(chalk.gray(msg));\n\nasync function main(): Promise<void> {\n green(\n \"\\nThis tool generates code scaffold for custom widgets in the Azure API Management’s developer portal. Learn more at https://aka.ms/apimdocs/portal/customwidgets.\\n\",\n );\n\n const getConfig = buildGetConfig(gray, red);\n\n white(\"Specify the custom widget configuration.\");\n const widgetConfig = await getConfig(promptWidgetConfig, validateWidgetConfig);\n white(\"Specify the Azure API Management service configuration.\");\n const serviceInformation = await getConfig(promptServiceInformation, validateDeployConfig);\n white(\"Specify other options\");\n const miscConfig = await getConfig(promptMiscConfig, validateMiscConfig);\n\n if (serviceInformation.resourceId[0] === \"/\") {\n serviceInformation.resourceId = serviceInformation.resourceId.slice(1);\n }\n if (serviceInformation.resourceId.slice(-1) === \"/\") {\n serviceInformation.resourceId = serviceInformation.resourceId.slice(0, -1);\n }\n if (serviceInformation.apiVersion === \"\") {\n delete serviceInformation.apiVersion;\n }\n\n serviceInformation.managementApiEndpoint = prefixUrlProtocol(\n serviceInformation.managementApiEndpoint,\n );\n\n miscConfig.openUrl = miscConfig.openUrl\n ? prefixUrlProtocol(miscConfig.openUrl)\n : miscConfig.openUrl;\n\n return generateProject(widgetConfig, serviceInformation, miscConfig)\n .then(() => green(\"\\nThe custom widget’s code scaffold has been successfully generated.\\n\"))\n .catch(console.error);\n}\n\nmain()\n .then(() => process.exit(0))\n .catch((err) => {\n console.error(err);\n process.exit(1);\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateProject.d.ts","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"generateProject.d.ts","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAelF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,kBAAkB,EACpC,OAAO,GAAE,OAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA8Df"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateProject.js","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;
|
|
1
|
+
{"version":3,"file":"generateProject.js","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ServiceInformation, Options, WidgetConfig } from \"./scaffolding.js\";\nimport {\n OVERRIDE_DEFAULT_PORT,\n OVERRIDE_PORT_KEY,\n displayNameToName,\n widgetFolderName,\n} from \"./scaffolding.js\";\nimport { sourceDir } from \"./sourceDir.js\";\nimport { join as joinPath, parse as parsePath } from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { getTemplates } from \"./getTemplates.js\";\nimport mustache from \"mustache\";\n\nconst templateSuffix = \".mustache\";\n\n/**\n * Generates a scaffold project of Custom widget for API Managements' Dev Portal.\n *\n * @param widgetConfig - JSON object with data required by DevPortal to handle a widget integration.\n * @param deploymentConfig - JSON object with data for deployment.\n * @param options - JSON object with other data, which will not be stored in the DevPortal.\n */\nexport async function generateProject(\n widgetConfig: WidgetConfig,\n deploymentConfig: ServiceInformation,\n options: Options = {},\n): Promise<void> {\n const { openUrl, configAdvancedTenantId, configAdvancedRedirectUri } = options;\n const openUrlParsed = openUrl ? new URL(openUrl) : null;\n if (openUrlParsed) {\n openUrlParsed.searchParams.append(OVERRIDE_PORT_KEY, String(OVERRIDE_DEFAULT_PORT));\n }\n\n const name = displayNameToName(widgetConfig.displayName);\n const serverSettings = {\n port: OVERRIDE_DEFAULT_PORT,\n open: openUrlParsed ? openUrlParsed.toString() : true,\n };\n\n const configAdditional = {\n interactiveBrowserCredentialOptions: { redirectUri: \"http://localhost:1337\" } as {\n redirectUri: string;\n tenantId?: string;\n },\n };\n if (configAdvancedTenantId) {\n configAdditional.interactiveBrowserCredentialOptions.tenantId = configAdvancedTenantId;\n }\n if (configAdvancedRedirectUri) {\n configAdditional.interactiveBrowserCredentialOptions.redirectUri = configAdvancedRedirectUri;\n }\n\n const renderTemplate = async (file: string): Promise<void> => {\n const isTemplate = file.endsWith(templateSuffix);\n const encoding = file.endsWith(\".ttf\") ? \"binary\" : \"utf8\";\n let fileData = await fs.readFile(file, { encoding });\n if (isTemplate) {\n fileData = mustache.render(fileData, {\n name,\n displayName: widgetConfig.displayName,\n config: JSON.stringify({ ...widgetConfig, name }, null, \"\\t\"),\n configDeploy: JSON.stringify(deploymentConfig, null, \"\\t\"),\n configAdditional: JSON.stringify(configAdditional, null, \"\\t\"),\n serverSettings: JSON.stringify(serverSettings, null, \"\\t\"),\n });\n }\n\n let relativePath = file;\n if (sourceDir.includes(\"\\\\\")) {\n relativePath = relativePath.replace(/\\//g, \"\\\\\");\n }\n relativePath = relativePath\n .replace(joinPath(sourceDir, \"..\", \"templates\", \"_shared\"), \"\")\n .replace(joinPath(sourceDir, \"..\", \"templates\", widgetConfig.technology), \"\")\n .replace(templateSuffix, \"\");\n const newFilePath = joinPath(process.cwd(), widgetFolderName(name), relativePath);\n const dir = parsePath(newFilePath).dir;\n\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(newFilePath, fileData, { encoding });\n };\n\n const templates = await getTemplates(widgetConfig.technology);\n for (const file of Object.values(templates)) {\n await renderTemplate(file);\n }\n\n return;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTemplates.d.ts","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"getTemplates.d.ts","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTemplates.js","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAOlC,oCAQC;AAZD,+BAA4B;AAC5B,yCAA6C;AAC7C,iDAA2C;AAEpC,KAAK,UAAU,YAAY,CAAC,QAAsB;IACvD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,IAAA,gBAAQ,EAAC,wBAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACrE,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAClC,IAAA,gBAAQ,EAAC,wBAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,iHAAiH;IACjH,kEAAkE;IAClE,wGAAwG;IACxG,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,IAAA,WAAI,EAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ScaffoldTech } from \"./scaffolding.js\";\nimport { glob } from \"glob\";\nimport { join as pathJoin } from \"node:path\";\nimport { sourceDir } from \"./sourceDir.js\";\n\nexport async function getTemplates(template: ScaffoldTech): Promise<string[]> {\n const sharedFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", \"_shared\", \"**\", \"**\", \"*.*\"),\n );\n const templateFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", template, \"**\", \"**\", \"*.*\"),\n );\n return [...sharedFiles, ...templateFiles];\n}\n\nasync function getFiles(path: string): Promise<string[]> {\n // Starting from glob v8 `\\` is only used as an escape character, and never as a path separator in glob patterns.\n // Glob pattern paths must use forward-slashes as path separators.\n // See https://github.com/isaacs/node-glob/blob/af57da21c7722bb6edb687ccd4ad3b99d3e7a333/changelog.md#80\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n return glob(normalizedPath, { dot: true });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getTemplates.js","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAOlC,oCAQC;AAZD,+BAA4B;AAC5B,yCAA6C;AAC7C,iDAA2C;AAEpC,KAAK,UAAU,YAAY,CAAC,QAAsB;IACvD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,IAAA,gBAAQ,EAAC,wBAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACrE,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAClC,IAAA,gBAAQ,EAAC,wBAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,iHAAiH;IACjH,kEAAkE;IAClE,wGAAwG;IACxG,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,IAAA,WAAI,EAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ScaffoldTech } from \"./scaffolding.js\";\nimport { glob } from \"glob\";\nimport { join as pathJoin } from \"node:path\";\nimport { sourceDir } from \"./sourceDir.js\";\n\nexport async function getTemplates(template: ScaffoldTech): Promise<string[]> {\n const sharedFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", \"_shared\", \"**\", \"**\", \"*.*\"),\n );\n const templateFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", template, \"**\", \"**\", \"*.*\"),\n );\n return [...sharedFiles, ...templateFiles];\n}\n\nasync function getFiles(path: string): Promise<string[]> {\n // Starting from glob v8 `\\` is only used as an escape character, and never as a path separator in glob patterns.\n // Glob pattern paths must use forward-slashes as path separators.\n // See https://github.com/isaacs/node-glob/blob/af57da21c7722bb6edb687ccd4ad3b99d3e7a333/changelog.md#80\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n return glob(normalizedPath, { dot: true });\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Configs, ServiceInformation, Options, WidgetConfig } from "../scaffolding.js";
|
|
1
|
+
import type { Configs, ServiceInformation, Options, WidgetConfig } from "../scaffolding.js";
|
|
2
2
|
export declare const fieldIdToName: Record<keyof (WidgetConfig & ServiceInformation & Options) | string, string>;
|
|
3
3
|
export declare const prefixUrlProtocol: (value: string) => string;
|
|
4
4
|
export type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-configs.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute-configs.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5F,eAAO,MAAM,aAAa,EAAE,MAAM,CAChC,MAAM,CAAC,YAAY,GAAG,kBAAkB,GAAG,OAAO,CAAC,GAAG,MAAM,EAC5D,MAAM,CAcP,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,KAAG,MACM,CAAC;AAwBzD,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI;KACvE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,OAAO,IAAI,4BAA4B,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAEvF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,YAAY,CAevD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,kBAAkB,CAY7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,OAAO,CAYhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAmB,OAAO,CAAC,YAAY,CAAC,KAAG,OAAO,CAAC,YAAY,CAwB7F,CAAC;AAEF,eAAO,MAAM,wBAAwB,YAC1B,OAAO,CAAC,kBAAkB,CAAC,KACnC,OAAO,CAAC,kBAAkB,CAkC5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAAmB,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,OAAO,CAiCjF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { TECHNOLOGIES
|
|
3
|
+
import { TECHNOLOGIES } from "../scaffolding.js";
|
|
4
4
|
export const fieldIdToName = {
|
|
5
5
|
displayName: "Widget display name",
|
|
6
6
|
technology: "Technology",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-configs.js","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n Configs,\n ServiceInformation,\n Options,\n TECHNOLOGIES,\n WidgetConfig,\n} from \"../scaffolding.js\";\n\nexport const fieldIdToName: Record<\n keyof (WidgetConfig & ServiceInformation & Options) | string,\n string\n> = {\n displayName: \"Widget display name\",\n technology: \"Technology\",\n iconUrl: \"iconUrl\",\n\n resourceId:\n \"Azure API Management resource ID (following format: subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ApiManagement/service/<api-management service-name>)\",\n managementApiEndpoint: \"Management API hostname\",\n apiVersion: \"Management API version\",\n\n openUrl: \"Developer portal URL\",\n configAdvancedTenantId: \"Tenant ID\",\n configAdvancedRedirectUri: \"Redirect URI\",\n};\n\nexport const prefixUrlProtocol = (value: string): string =>\n /https?:\\/\\//.test(value) ? value : `https://${value}`;\n\nconst validateRequired =\n (name: string, msg: string = `The “${name}” parameter is required.`) =>\n (input: unknown) =>\n (input != null && input !== \"\") || msg;\n\nconst validateUrl =\n (\n name: string,\n msg = (input: string) =>\n `Provided “${name}” parameter value (“${prefixUrlProtocol(\n input,\n )}”) isn’t a valid URL. Use the correct URL format, e.g., https://contoso.com.`,\n ) =>\n (input: string) => {\n try {\n new URL(prefixUrlProtocol(input));\n return true;\n } catch (e) {\n return msg(prefixUrlProtocol(input));\n }\n };\n\nexport type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {\n [Key in keyof T]: T[Key] extends undefined ? V | undefined : V;\n};\n\nexport type ValidateFnc = (input: string) => boolean | string;\nexport type Validate<C extends Configs> = ReplaceTypesPreserveOptional<C, ValidateFnc>;\n\nexport const validateWidgetConfig: Validate<WidgetConfig> = {\n displayName: validateRequired(fieldIdToName.displayName),\n technology: (input) => {\n const required = validateRequired(fieldIdToName.technology)(input);\n if (required !== true) return required;\n\n if (TECHNOLOGIES.includes(input as any)) {\n return true;\n } else {\n return (\n \"Provided “technology” parameter value isn’t correct. Use one of the following: \" +\n TECHNOLOGIES.join(\", \")\n );\n }\n },\n};\n\nexport const validateDeployConfig: Validate<ServiceInformation> = {\n resourceId: (input) => {\n const required = validateRequired(fieldIdToName.resourceId)(input);\n if (required !== true) return required;\n\n const regex =\n /^\\/?subscriptions\\/[^/]+\\/resourceGroups\\/[^/]+\\/providers\\/Microsoft\\.ApiManagement\\/service\\/[^/]+\\/?$/;\n return input === \"test\" || regex.test(input)\n ? true\n : \"Resource ID needs to be a valid Azure resource ID. For example, subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso-group/providers/Microsoft.ApiManagement/service/contoso-apis.\";\n },\n managementApiEndpoint: (input) => validateRequired(fieldIdToName.managementApiEndpoint)(input),\n};\n\nexport const validateMiscConfig: Validate<Options> = {\n openUrl: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n configAdvancedTenantId: () => {\n return true;\n },\n configAdvancedRedirectUri: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n};\n\nexport const promptWidgetConfig = async (partial: Partial<WidgetConfig>): Promise<WidgetConfig> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"displayName\",\n type: \"input\",\n message: fieldIdToName.displayName,\n validate: validateWidgetConfig.displayName,\n },\n {\n name: \"technology\",\n type: \"list\",\n message: fieldIdToName.technology,\n choices: [\n { name: \"React\", value: \"react\" },\n { name: \"Vue\", value: \"vue\" },\n { name: \"TypeScript\", value: \"typescript\" },\n ],\n },\n ],\n partial,\n );\n};\n\nexport const promptServiceInformation = async (\n partial: Partial<ServiceInformation>,\n): Promise<ServiceInformation> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"resourceId\",\n type: \"input\",\n message: fieldIdToName.resourceId,\n validate: validateDeployConfig.resourceId,\n },\n {\n name: \"managementApiEndpoint\",\n type: \"list\",\n message: fieldIdToName.managementApiEndpoint,\n choices: [\n {\n name: \"management.azure.com (if you're not sure what to select, use this option)\",\n value: \"management.azure.com\",\n },\n { name: \"management.usgovcloudapi.net\", value: \"management.usgovcloudapi.net\" },\n { name: \"management.chinacloudapi.cn\", value: \"management.chinacloudapi.cn\" },\n ],\n transformer: prefixUrlProtocol,\n validate: validateDeployConfig.managementApiEndpoint,\n },\n {\n name: \"apiVersion\",\n type: \"input\",\n message: fieldIdToName.apiVersion + \" (optional; e.g., 2021-08-01)\",\n },\n ],\n partial,\n );\n};\n\nexport const promptMiscConfig = async (partial: Partial<Options>): Promise<Options> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"openUrl\",\n type: \"input\",\n message:\n fieldIdToName.openUrl +\n \" for widget development and testing (optional; e.g., https://contoso.developer.azure-api.net/ or http://localhost:8080)\",\n transformer: prefixUrlProtocol,\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedTenantId\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedTenantId +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional)\",\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedRedirectUri\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedRedirectUri +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional; default is http://localhost:1337)\",\n validate: validateMiscConfig.openUrl,\n },\n ],\n partial,\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"execute-configs.js","sourceRoot":"","sources":["../../../src/bin/execute-configs.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Configs, ServiceInformation, Options, WidgetConfig } from \"../scaffolding.js\";\nimport { TECHNOLOGIES } from \"../scaffolding.js\";\n\nexport const fieldIdToName: Record<\n keyof (WidgetConfig & ServiceInformation & Options) | string,\n string\n> = {\n displayName: \"Widget display name\",\n technology: \"Technology\",\n iconUrl: \"iconUrl\",\n\n resourceId:\n \"Azure API Management resource ID (following format: subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ApiManagement/service/<api-management service-name>)\",\n managementApiEndpoint: \"Management API hostname\",\n apiVersion: \"Management API version\",\n\n openUrl: \"Developer portal URL\",\n configAdvancedTenantId: \"Tenant ID\",\n configAdvancedRedirectUri: \"Redirect URI\",\n};\n\nexport const prefixUrlProtocol = (value: string): string =>\n /https?:\\/\\//.test(value) ? value : `https://${value}`;\n\nconst validateRequired =\n (name: string, msg: string = `The “${name}” parameter is required.`) =>\n (input: unknown) =>\n (input != null && input !== \"\") || msg;\n\nconst validateUrl =\n (\n name: string,\n msg = (input: string) =>\n `Provided “${name}” parameter value (“${prefixUrlProtocol(\n input,\n )}”) isn’t a valid URL. Use the correct URL format, e.g., https://contoso.com.`,\n ) =>\n (input: string) => {\n try {\n new URL(prefixUrlProtocol(input));\n return true;\n } catch (e) {\n return msg(prefixUrlProtocol(input));\n }\n };\n\nexport type ReplaceTypesPreserveOptional<T extends Record<any, any>, V> = {\n [Key in keyof T]: T[Key] extends undefined ? V | undefined : V;\n};\n\nexport type ValidateFnc = (input: string) => boolean | string;\nexport type Validate<C extends Configs> = ReplaceTypesPreserveOptional<C, ValidateFnc>;\n\nexport const validateWidgetConfig: Validate<WidgetConfig> = {\n displayName: validateRequired(fieldIdToName.displayName),\n technology: (input) => {\n const required = validateRequired(fieldIdToName.technology)(input);\n if (required !== true) return required;\n\n if (TECHNOLOGIES.includes(input as any)) {\n return true;\n } else {\n return (\n \"Provided “technology” parameter value isn’t correct. Use one of the following: \" +\n TECHNOLOGIES.join(\", \")\n );\n }\n },\n};\n\nexport const validateDeployConfig: Validate<ServiceInformation> = {\n resourceId: (input) => {\n const required = validateRequired(fieldIdToName.resourceId)(input);\n if (required !== true) return required;\n\n const regex =\n /^\\/?subscriptions\\/[^/]+\\/resourceGroups\\/[^/]+\\/providers\\/Microsoft\\.ApiManagement\\/service\\/[^/]+\\/?$/;\n return input === \"test\" || regex.test(input)\n ? true\n : \"Resource ID needs to be a valid Azure resource ID. For example, subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso-group/providers/Microsoft.ApiManagement/service/contoso-apis.\";\n },\n managementApiEndpoint: (input) => validateRequired(fieldIdToName.managementApiEndpoint)(input),\n};\n\nexport const validateMiscConfig: Validate<Options> = {\n openUrl: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n configAdvancedTenantId: () => {\n return true;\n },\n configAdvancedRedirectUri: (input) => {\n if (!input) return true;\n return validateUrl(fieldIdToName.openUrl)(input);\n },\n};\n\nexport const promptWidgetConfig = async (partial: Partial<WidgetConfig>): Promise<WidgetConfig> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"displayName\",\n type: \"input\",\n message: fieldIdToName.displayName,\n validate: validateWidgetConfig.displayName,\n },\n {\n name: \"technology\",\n type: \"list\",\n message: fieldIdToName.technology,\n choices: [\n { name: \"React\", value: \"react\" },\n { name: \"Vue\", value: \"vue\" },\n { name: \"TypeScript\", value: \"typescript\" },\n ],\n },\n ],\n partial,\n );\n};\n\nexport const promptServiceInformation = async (\n partial: Partial<ServiceInformation>,\n): Promise<ServiceInformation> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"resourceId\",\n type: \"input\",\n message: fieldIdToName.resourceId,\n validate: validateDeployConfig.resourceId,\n },\n {\n name: \"managementApiEndpoint\",\n type: \"list\",\n message: fieldIdToName.managementApiEndpoint,\n choices: [\n {\n name: \"management.azure.com (if you're not sure what to select, use this option)\",\n value: \"management.azure.com\",\n },\n { name: \"management.usgovcloudapi.net\", value: \"management.usgovcloudapi.net\" },\n { name: \"management.chinacloudapi.cn\", value: \"management.chinacloudapi.cn\" },\n ],\n transformer: prefixUrlProtocol,\n validate: validateDeployConfig.managementApiEndpoint,\n },\n {\n name: \"apiVersion\",\n type: \"input\",\n message: fieldIdToName.apiVersion + \" (optional; e.g., 2021-08-01)\",\n },\n ],\n partial,\n );\n};\n\nexport const promptMiscConfig = async (partial: Partial<Options>): Promise<Options> => {\n const inquirerImport = await import(\"inquirer\");\n const inquirer = inquirerImport.default;\n return inquirer.prompt(\n [\n {\n name: \"openUrl\",\n type: \"input\",\n message:\n fieldIdToName.openUrl +\n \" for widget development and testing (optional; e.g., https://contoso.developer.azure-api.net/ or http://localhost:8080)\",\n transformer: prefixUrlProtocol,\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedTenantId\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedTenantId +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional)\",\n validate: validateMiscConfig.openUrl,\n },\n {\n name: \"configAdvancedRedirectUri\",\n type: \"input\",\n message:\n fieldIdToName.configAdvancedRedirectUri +\n \" to be used in Azure Identity InteractiveBrowserCredential class (optional; default is http://localhost:1337)\",\n validate: validateMiscConfig.openUrl,\n },\n ],\n partial,\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from "./execute-configs.js";
|
|
2
|
-
import { Configs } from "../scaffolding.js";
|
|
1
|
+
import type { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from "./execute-configs.js";
|
|
2
|
+
import type { Configs } from "../scaffolding.js";
|
|
3
3
|
import yargsParser from "yargs-parser";
|
|
4
4
|
export declare const extractConfigFromArgs: <TConfig extends Configs>(argv: yargsParser.Arguments, validateConfig: Validate<TConfig>, red: (msg: string) => void) => {
|
|
5
5
|
configPartial: Partial<TConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-helpers.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"execute-helpers.d.ts","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,4BAA4B,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEhG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,eAAO,MAAM,qBAAqB,GAAI,OAAO,SAAS,OAAO,QACrD,WAAW,CAAC,SAAS,kBACX,QAAQ,CAAC,OAAO,CAAC,OAC5B,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KACzB;IAAE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAuBrD,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AACxC,KAAK,MAAM,GAAG,CAAC,CAAC,SAAS,OAAO,EAC9B,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACpD,cAAc,EAAE,4BAA4B,CAAC,CAAC,EAAE,WAAW,CAAC,KACzD,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,eAAO,MAAM,cAAc,SAAU,GAAG,OAAO,GAAG,KAAG,MAkBpD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { fieldIdToName
|
|
3
|
+
import { fieldIdToName } from "./execute-configs.js";
|
|
4
4
|
import { hideBin } from "yargs/helpers";
|
|
5
5
|
import yargsParser from "yargs-parser";
|
|
6
6
|
export const extractConfigFromArgs = (argv, validateConfig, red) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-helpers.js","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;
|
|
1
|
+
{"version":3,"file":"execute-helpers.js","sourceRoot":"","sources":["../../../src/bin/execute-helpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,IAA2B,EAC3B,cAAiC,EACjC,GAA0B,EAC6B,EAAE;IACzD,MAAM,aAAa,GAAqB,EAAE,CAAC;IAC3C,IAAI,OAAO,GAAY,KAAK,CAAC;IAE7B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QAClD,MAAM,QAAQ,GAAG,CAAgB,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,aAAa,CAAC,GAAkC,CAAC,GAAG,KAAK,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC;YACf,GAAG,CAAC,IAAI,KAAK,+BAA+B,GAAG,GAAG,CAAC,CAAC;YACpD,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAS,EAAE,GAAQ,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,OAAO,KAAK,EACV,eAAoD,EACpD,cAA2B,EAC3B,EAAE;QACF,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;QAEpF,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CACnC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,WAAC,OAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,MAAA,aAAa,CAAC,GAAG,CAAC,mCAAI,GAAG,KAAK,KAAK,EAAE,CAAC,CAAA,EAAA,CAClF,CAAC;YACF,OAAO,aAAkB,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ReplaceTypesPreserveOptional, Validate, ValidateFnc } from \"./execute-configs.js\";\nimport { fieldIdToName } from \"./execute-configs.js\";\nimport type { Configs } from \"../scaffolding.js\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargsParser from \"yargs-parser\";\n\nexport const extractConfigFromArgs = <TConfig extends Configs>(\n argv: yargsParser.Arguments,\n validateConfig: Validate<TConfig>,\n red: (msg: string) => void,\n): { configPartial: Partial<TConfig>; missing: boolean } => {\n const configPartial: Partial<TConfig> = {};\n let missing: boolean = false;\n\n Object.entries(validateConfig).forEach(([key, v]) => {\n const validate = v as ValidateFnc;\n const value = argv[key];\n const response = validate(value);\n\n if (response === true) {\n if (value !== null && value !== undefined) {\n configPartial[key as keyof typeof validateConfig] = value;\n }\n } else if (value === null || value === undefined) {\n missing = true;\n } else {\n missing = true;\n red(`\"${value}\" is not a valid value for \"${key}\"`);\n if (typeof response === \"string\") red(response);\n }\n });\n\n return { configPartial, missing };\n};\n\nexport type Log = (msg: string) => void;\ntype Config = <C extends Configs>(\n promptForConfig: (partial: Partial<C>) => Promise<C>,\n validateConfig: ReplaceTypesPreserveOptional<C, ValidateFnc>,\n) => Promise<C>;\n\nexport const buildGetConfig = (gray: Log, red: Log): Config => {\n const argv = yargsParser(hideBin(process.argv));\n return async <C extends Configs>(\n promptForConfig: (partial: Partial<C>) => Promise<C>,\n validateConfig: Validate<C>,\n ) => {\n const { configPartial, missing } = extractConfigFromArgs(argv, validateConfig, red);\n\n if (missing || !Object.values(configPartial).length) {\n return promptForConfig(configPartial);\n } else {\n gray(\"Retrieved from the command parameters\");\n Object.entries(configPartial).forEach(\n ([key, value]) => value != null && gray(`${fieldIdToName[key] ?? key}: ${value}`),\n );\n return configPartial as C;\n }\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/bin/execute.ts"],"names":[],"mappings":";AAEA,uCAAuC;AACvC,kCAAkC;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/bin/execute.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Log } from \"./execute-helpers.js\";\nimport { buildGetConfig } from \"./execute-helpers.js\";\nimport {\n prefixUrlProtocol,\n promptServiceInformation,\n promptMiscConfig,\n promptWidgetConfig,\n validateDeployConfig,\n validateMiscConfig,\n validateWidgetConfig,\n} from \"./execute-configs.js\";\nimport chalk from \"chalk\";\nimport { generateProject } from \"../generateProject.js\";\n\nconst log = console.log;\nconst white: Log = (msg) => log(chalk.white(msg));\nconst green: Log = (msg) => log(chalk.green(msg));\nconst red: Log = (msg) => log(chalk.red(msg));\nconst gray: Log = (msg) => log(chalk.gray(msg));\n\nasync function main(): Promise<void> {\n green(\n \"\\nThis tool generates code scaffold for custom widgets in the Azure API Management’s developer portal. Learn more at https://aka.ms/apimdocs/portal/customwidgets.\\n\",\n );\n\n const getConfig = buildGetConfig(gray, red);\n\n white(\"Specify the custom widget configuration.\");\n const widgetConfig = await getConfig(promptWidgetConfig, validateWidgetConfig);\n white(\"Specify the Azure API Management service configuration.\");\n const serviceInformation = await getConfig(promptServiceInformation, validateDeployConfig);\n white(\"Specify other options\");\n const miscConfig = await getConfig(promptMiscConfig, validateMiscConfig);\n\n if (serviceInformation.resourceId[0] === \"/\") {\n serviceInformation.resourceId = serviceInformation.resourceId.slice(1);\n }\n if (serviceInformation.resourceId.slice(-1) === \"/\") {\n serviceInformation.resourceId = serviceInformation.resourceId.slice(0, -1);\n }\n if (serviceInformation.apiVersion === \"\") {\n delete serviceInformation.apiVersion;\n }\n\n serviceInformation.managementApiEndpoint = prefixUrlProtocol(\n serviceInformation.managementApiEndpoint,\n );\n\n miscConfig.openUrl = miscConfig.openUrl\n ? prefixUrlProtocol(miscConfig.openUrl)\n : miscConfig.openUrl;\n\n return generateProject(widgetConfig, serviceInformation, miscConfig)\n .then(() => green(\"\\nThe custom widget’s code scaffold has been successfully generated.\\n\"))\n .catch(console.error);\n}\n\nmain()\n .then(() => process.exit(0))\n .catch((err) => {\n console.error(err);\n process.exit(1);\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateProject.d.ts","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"generateProject.d.ts","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAelF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,kBAAkB,EACpC,OAAO,GAAE,OAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA8Df"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateProject.js","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;
|
|
1
|
+
{"version":3,"file":"generateProject.js","sourceRoot":"","sources":["../../src/generateProject.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ServiceInformation, Options, WidgetConfig } from \"./scaffolding.js\";\nimport {\n OVERRIDE_DEFAULT_PORT,\n OVERRIDE_PORT_KEY,\n displayNameToName,\n widgetFolderName,\n} from \"./scaffolding.js\";\nimport { sourceDir } from \"./sourceDir.js\";\nimport { join as joinPath, parse as parsePath } from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { getTemplates } from \"./getTemplates.js\";\nimport mustache from \"mustache\";\n\nconst templateSuffix = \".mustache\";\n\n/**\n * Generates a scaffold project of Custom widget for API Managements' Dev Portal.\n *\n * @param widgetConfig - JSON object with data required by DevPortal to handle a widget integration.\n * @param deploymentConfig - JSON object with data for deployment.\n * @param options - JSON object with other data, which will not be stored in the DevPortal.\n */\nexport async function generateProject(\n widgetConfig: WidgetConfig,\n deploymentConfig: ServiceInformation,\n options: Options = {},\n): Promise<void> {\n const { openUrl, configAdvancedTenantId, configAdvancedRedirectUri } = options;\n const openUrlParsed = openUrl ? new URL(openUrl) : null;\n if (openUrlParsed) {\n openUrlParsed.searchParams.append(OVERRIDE_PORT_KEY, String(OVERRIDE_DEFAULT_PORT));\n }\n\n const name = displayNameToName(widgetConfig.displayName);\n const serverSettings = {\n port: OVERRIDE_DEFAULT_PORT,\n open: openUrlParsed ? openUrlParsed.toString() : true,\n };\n\n const configAdditional = {\n interactiveBrowserCredentialOptions: { redirectUri: \"http://localhost:1337\" } as {\n redirectUri: string;\n tenantId?: string;\n },\n };\n if (configAdvancedTenantId) {\n configAdditional.interactiveBrowserCredentialOptions.tenantId = configAdvancedTenantId;\n }\n if (configAdvancedRedirectUri) {\n configAdditional.interactiveBrowserCredentialOptions.redirectUri = configAdvancedRedirectUri;\n }\n\n const renderTemplate = async (file: string): Promise<void> => {\n const isTemplate = file.endsWith(templateSuffix);\n const encoding = file.endsWith(\".ttf\") ? \"binary\" : \"utf8\";\n let fileData = await fs.readFile(file, { encoding });\n if (isTemplate) {\n fileData = mustache.render(fileData, {\n name,\n displayName: widgetConfig.displayName,\n config: JSON.stringify({ ...widgetConfig, name }, null, \"\\t\"),\n configDeploy: JSON.stringify(deploymentConfig, null, \"\\t\"),\n configAdditional: JSON.stringify(configAdditional, null, \"\\t\"),\n serverSettings: JSON.stringify(serverSettings, null, \"\\t\"),\n });\n }\n\n let relativePath = file;\n if (sourceDir.includes(\"\\\\\")) {\n relativePath = relativePath.replace(/\\//g, \"\\\\\");\n }\n relativePath = relativePath\n .replace(joinPath(sourceDir, \"..\", \"templates\", \"_shared\"), \"\")\n .replace(joinPath(sourceDir, \"..\", \"templates\", widgetConfig.technology), \"\")\n .replace(templateSuffix, \"\");\n const newFilePath = joinPath(process.cwd(), widgetFolderName(name), relativePath);\n const dir = parsePath(newFilePath).dir;\n\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(newFilePath, fileData, { encoding });\n };\n\n const templates = await getTemplates(widgetConfig.technology);\n for (const file of Object.values(templates)) {\n await renderTemplate(file);\n }\n\n return;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTemplates.d.ts","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"getTemplates.d.ts","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKrD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTemplates.js","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAsB;IACvD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACrE,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,iHAAiH;IACjH,kEAAkE;IAClE,wGAAwG;IACxG,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ScaffoldTech } from \"./scaffolding.js\";\nimport { glob } from \"glob\";\nimport { join as pathJoin } from \"node:path\";\nimport { sourceDir } from \"./sourceDir.js\";\n\nexport async function getTemplates(template: ScaffoldTech): Promise<string[]> {\n const sharedFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", \"_shared\", \"**\", \"**\", \"*.*\"),\n );\n const templateFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", template, \"**\", \"**\", \"*.*\"),\n );\n return [...sharedFiles, ...templateFiles];\n}\n\nasync function getFiles(path: string): Promise<string[]> {\n // Starting from glob v8 `\\` is only used as an escape character, and never as a path separator in glob patterns.\n // Glob pattern paths must use forward-slashes as path separators.\n // See https://github.com/isaacs/node-glob/blob/af57da21c7722bb6edb687ccd4ad3b99d3e7a333/changelog.md#80\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n return glob(normalizedPath, { dot: true });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getTemplates.js","sourceRoot":"","sources":["../../src/getTemplates.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAsB;IACvD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAChC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACrE,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CACpE,CAAC;IACF,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,iHAAiH;IACjH,kEAAkE;IAClE,wGAAwG;IACxG,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ScaffoldTech } from \"./scaffolding.js\";\nimport { glob } from \"glob\";\nimport { join as pathJoin } from \"node:path\";\nimport { sourceDir } from \"./sourceDir.js\";\n\nexport async function getTemplates(template: ScaffoldTech): Promise<string[]> {\n const sharedFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", \"_shared\", \"**\", \"**\", \"*.*\"),\n );\n const templateFiles = await getFiles(\n pathJoin(sourceDir, \"..\", \"templates\", template, \"**\", \"**\", \"*.*\"),\n );\n return [...sharedFiles, ...templateFiles];\n}\n\nasync function getFiles(path: string): Promise<string[]> {\n // Starting from glob v8 `\\` is only used as an escape character, and never as a path separator in glob patterns.\n // Glob pattern paths must use forward-slashes as path separators.\n // See https://github.com/isaacs/node-glob/blob/af57da21c7722bb6edb687ccd4ad3b99d3e7a333/changelog.md#80\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n return glob(normalizedPath, { dot: true });\n}\n"]}
|