@microsoft/teamsfx-core 3.0.13 → 3.0.14-alpha.1ba1d62e58.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/build/client/teamsGraphClient.d.ts +3 -0
- package/build/client/teamsGraphClient.d.ts.map +1 -1
- package/build/client/teamsGraphClient.js +17 -0
- package/build/client/teamsGraphClient.js.map +1 -1
- package/build/common/featureFlags.d.ts +12 -2
- package/build/common/featureFlags.d.ts.map +1 -1
- package/build/common/featureFlags.js +15 -3
- package/build/common/featureFlags.js.map +1 -1
- package/build/common/projectSettingsHelper.d.ts +0 -2
- package/build/common/projectSettingsHelper.d.ts.map +1 -1
- package/build/common/projectSettingsHelper.js +1 -56
- package/build/common/projectSettingsHelper.js.map +1 -1
- package/build/common/telemetry.d.ts +4 -15
- package/build/common/telemetry.d.ts.map +1 -1
- package/build/common/telemetry.js +5 -18
- package/build/common/telemetry.js.map +1 -1
- package/build/common/templates-config.json +8 -2
- package/build/component/configManager/validator.d.ts.map +1 -1
- package/build/component/configManager/validator.js +2 -0
- package/build/component/configManager/validator.js.map +1 -1
- package/build/component/coordinator/index.d.ts.map +1 -1
- package/build/component/coordinator/index.js +5 -1
- package/build/component/coordinator/index.js.map +1 -1
- package/build/component/driver/copilotAgent/interfaces/PublishArgs.d.ts +14 -0
- package/build/component/driver/copilotAgent/interfaces/PublishArgs.d.ts.map +1 -0
- package/build/component/driver/copilotAgent/interfaces/PublishArgs.js +5 -0
- package/build/component/driver/copilotAgent/interfaces/PublishArgs.js.map +1 -0
- package/build/component/driver/copilotAgent/publish.d.ts +16 -0
- package/build/component/driver/copilotAgent/publish.d.ts.map +1 -0
- package/build/component/driver/copilotAgent/publish.js +175 -0
- package/build/component/driver/copilotAgent/publish.js.map +1 -0
- package/build/component/driver/dcr/create.d.ts +10 -0
- package/build/component/driver/dcr/create.d.ts.map +1 -0
- package/build/component/driver/dcr/create.js +142 -0
- package/build/component/driver/dcr/create.js.map +1 -0
- package/build/component/driver/dcr/error/dcrNameTooLong.d.ts +5 -0
- package/build/component/driver/dcr/error/dcrNameTooLong.d.ts.map +1 -0
- package/build/component/driver/dcr/error/dcrNameTooLong.js +21 -0
- package/build/component/driver/dcr/error/dcrNameTooLong.js.map +1 -0
- package/build/component/driver/dcr/error/dcrWellKnownInvalid.d.ts +5 -0
- package/build/component/driver/dcr/error/dcrWellKnownInvalid.d.ts.map +1 -0
- package/build/component/driver/dcr/error/dcrWellKnownInvalid.js +21 -0
- package/build/component/driver/dcr/error/dcrWellKnownInvalid.js.map +1 -0
- package/build/component/driver/dcr/interface/createDcrArgs.d.ts +9 -0
- package/build/component/driver/dcr/interface/createDcrArgs.d.ts.map +1 -0
- package/build/component/driver/dcr/interface/createDcrArgs.js +5 -0
- package/build/component/driver/dcr/interface/createDcrArgs.js.map +1 -0
- package/build/component/driver/dcr/interface/createDcrOutputs.d.ts +7 -0
- package/build/component/driver/dcr/interface/createDcrOutputs.d.ts.map +1 -0
- package/build/component/driver/dcr/interface/createDcrOutputs.js +10 -0
- package/build/component/driver/dcr/interface/createDcrOutputs.js.map +1 -0
- package/build/component/driver/dcr/utility/constants.d.ts +7 -0
- package/build/component/driver/dcr/utility/constants.d.ts.map +1 -0
- package/build/component/driver/dcr/utility/constants.js +12 -0
- package/build/component/driver/dcr/utility/constants.js.map +1 -0
- package/build/component/driver/index.d.ts +2 -0
- package/build/component/driver/index.d.ts.map +1 -1
- package/build/component/driver/index.js +2 -0
- package/build/component/driver/index.js.map +1 -1
- package/build/component/driver/teamsApp/constants.d.ts +1 -0
- package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
- package/build/component/driver/teamsApp/constants.js +1 -0
- package/build/component/driver/teamsApp/constants.js.map +1 -1
- package/build/component/driver/teamsApp/createAppPackage.d.ts +2 -0
- package/build/component/driver/teamsApp/createAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/createAppPackage.js +51 -6
- package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts +10 -0
- package/build/component/driver/teamsApp/interfaces/DcrRegistration.d.ts.map +1 -0
- package/build/component/driver/teamsApp/interfaces/DcrRegistration.js +5 -0
- package/build/component/driver/teamsApp/interfaces/DcrRegistration.js.map +1 -0
- package/build/component/driver/teamsApp/publishAppPackage.d.ts +0 -2
- package/build/component/driver/teamsApp/publishAppPackage.d.ts.map +1 -1
- package/build/component/driver/teamsApp/publishAppPackage.js +2 -51
- package/build/component/driver/teamsApp/publishAppPackage.js.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
- package/build/component/driver/teamsApp/utils/ManifestUtils.js +10 -2
- package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
- package/build/component/driver/teamsApp/utils/McpCertVerification.d.ts +13 -0
- package/build/component/driver/teamsApp/utils/McpCertVerification.d.ts.map +1 -0
- package/build/component/driver/teamsApp/utils/McpCertVerification.js +65 -0
- package/build/component/driver/teamsApp/utils/McpCertVerification.js.map +1 -0
- package/build/component/driver/teamsApp/validate.js +1 -1
- package/build/component/driver/teamsApp/validate.js.map +1 -1
- package/build/component/generator/declarativeAgent/generator.d.ts.map +1 -1
- package/build/component/generator/declarativeAgent/generator.js +1 -2
- package/build/component/generator/declarativeAgent/generator.js.map +1 -1
- package/build/component/generator/defaultGenerator.d.ts.map +1 -1
- package/build/component/generator/defaultGenerator.js +14 -1
- package/build/component/generator/defaultGenerator.js.map +1 -1
- package/build/component/generator/error.d.ts +3 -0
- package/build/component/generator/error.d.ts.map +1 -1
- package/build/component/generator/error.js +7 -1
- package/build/component/generator/error.js.map +1 -1
- package/build/component/generator/officeAddin/generator.d.ts +8 -0
- package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
- package/build/component/generator/officeAddin/generator.js +47 -0
- package/build/component/generator/officeAddin/generator.js.map +1 -1
- package/build/component/generator/openPlugin/authorParser.d.ts +8 -0
- package/build/component/generator/openPlugin/authorParser.d.ts.map +1 -0
- package/build/component/generator/openPlugin/authorParser.js +49 -0
- package/build/component/generator/openPlugin/authorParser.js.map +1 -0
- package/build/component/generator/openPlugin/deterministicId.d.ts +6 -0
- package/build/component/generator/openPlugin/deterministicId.d.ts.map +1 -0
- package/build/component/generator/openPlugin/deterministicId.js +31 -0
- package/build/component/generator/openPlugin/deterministicId.js.map +1 -0
- package/build/component/generator/openPlugin/exporter.d.ts +18 -0
- package/build/component/generator/openPlugin/exporter.d.ts.map +1 -0
- package/build/component/generator/openPlugin/exporter.js +233 -0
- package/build/component/generator/openPlugin/exporter.js.map +1 -0
- package/build/component/generator/openPlugin/iconStrategy.d.ts +8 -0
- package/build/component/generator/openPlugin/iconStrategy.d.ts.map +1 -0
- package/build/component/generator/openPlugin/iconStrategy.js +62 -0
- package/build/component/generator/openPlugin/iconStrategy.js.map +1 -0
- package/build/component/generator/openPlugin/importer.d.ts +25 -0
- package/build/component/generator/openPlugin/importer.d.ts.map +1 -0
- package/build/component/generator/openPlugin/importer.js +140 -0
- package/build/component/generator/openPlugin/importer.js.map +1 -0
- package/build/component/generator/openPlugin/mapper.d.ts +6 -0
- package/build/component/generator/openPlugin/mapper.d.ts.map +1 -0
- package/build/component/generator/openPlugin/mapper.js +141 -0
- package/build/component/generator/openPlugin/mapper.js.map +1 -0
- package/build/component/generator/openPlugin/parser.d.ts +3 -0
- package/build/component/generator/openPlugin/parser.d.ts.map +1 -0
- package/build/component/generator/openPlugin/parser.js +153 -0
- package/build/component/generator/openPlugin/parser.js.map +1 -0
- package/build/component/generator/openPlugin/placeholderPng.d.ts +6 -0
- package/build/component/generator/openPlugin/placeholderPng.d.ts.map +1 -0
- package/build/component/generator/openPlugin/placeholderPng.js +71 -0
- package/build/component/generator/openPlugin/placeholderPng.js.map +1 -0
- package/build/component/generator/openPlugin/textUtils.d.ts +12 -0
- package/build/component/generator/openPlugin/textUtils.d.ts.map +1 -0
- package/build/component/generator/openPlugin/textUtils.js +43 -0
- package/build/component/generator/openPlugin/textUtils.js.map +1 -0
- package/build/component/generator/openPlugin/types.d.ts +128 -0
- package/build/component/generator/openPlugin/types.d.ts.map +1 -0
- package/build/component/generator/openPlugin/types.js.map +1 -0
- package/build/component/generator/templates/templateNames.d.ts +2 -1
- package/build/component/generator/templates/templateNames.d.ts.map +1 -1
- package/build/component/generator/templates/templateNames.js +2 -0
- package/build/component/generator/templates/templateNames.js.map +1 -1
- package/build/component/generator/templates/templateReplaceMap.d.ts.map +1 -1
- package/build/component/generator/templates/templateReplaceMap.js +4 -1
- package/build/component/generator/templates/templateReplaceMap.js.map +1 -1
- package/build/component/generator/v4TemplateBridge.d.ts +29 -0
- package/build/component/generator/v4TemplateBridge.d.ts.map +1 -0
- package/build/component/generator/v4TemplateBridge.js +114 -0
- package/build/component/generator/v4TemplateBridge.js.map +1 -0
- package/build/component/m365/packageService.d.ts +5 -0
- package/build/component/m365/packageService.d.ts.map +1 -1
- package/build/component/m365/packageService.js +23 -1
- package/build/component/m365/packageService.js.map +1 -1
- package/build/core/FxCore.d.ts +2 -4
- package/build/core/FxCore.d.ts.map +1 -1
- package/build/core/FxCore.js +3 -62
- package/build/core/FxCore.js.map +1 -1
- package/build/core/FxCore.openPlugin.d.ts +23 -0
- package/build/core/FxCore.openPlugin.d.ts.map +1 -0
- package/build/core/FxCore.openPlugin.js +131 -0
- package/build/core/FxCore.openPlugin.js.map +1 -0
- package/build/core/middleware/concurrentLocker.d.ts.map +1 -1
- package/build/core/middleware/concurrentLocker.js +0 -3
- package/build/core/middleware/concurrentLocker.js.map +1 -1
- package/build/core/middleware/errorHandler.d.ts.map +1 -1
- package/build/core/middleware/errorHandler.js +9 -0
- package/build/core/middleware/errorHandler.js.map +1 -1
- package/build/core/middleware/utils/v3MigrationUtils.d.ts +1 -34
- package/build/core/middleware/utils/v3MigrationUtils.d.ts.map +1 -1
- package/build/core/middleware/utils/v3MigrationUtils.js +6 -245
- package/build/core/middleware/utils/v3MigrationUtils.js.map +1 -1
- package/build/question/constants.d.ts.map +1 -1
- package/build/question/constants.js +1 -6
- package/build/question/constants.js.map +1 -1
- package/build/question/inputs/ExportOpenPluginInputs.d.ts +10 -0
- package/build/question/inputs/ExportOpenPluginInputs.d.ts.map +1 -0
- package/build/question/inputs/ExportOpenPluginInputs.js +5 -0
- package/build/question/inputs/ExportOpenPluginInputs.js.map +1 -0
- package/build/question/inputs/ImportOpenPluginInputs.d.ts +28 -0
- package/build/question/inputs/ImportOpenPluginInputs.d.ts.map +1 -0
- package/build/question/inputs/ImportOpenPluginInputs.js +5 -0
- package/build/question/inputs/ImportOpenPluginInputs.js.map +1 -0
- package/build/question/inputs/index.d.ts +2 -0
- package/build/question/inputs/index.d.ts.map +1 -1
- package/build/question/inputs/index.js +2 -0
- package/build/question/inputs/index.js.map +1 -1
- package/build/question/options/ExportOpenPluginOptions.d.ts +4 -0
- package/build/question/options/ExportOpenPluginOptions.d.ts.map +1 -0
- package/build/question/options/ExportOpenPluginOptions.js +29 -0
- package/build/question/options/ExportOpenPluginOptions.js.map +1 -0
- package/build/question/options/ImportOpenPluginOptions.d.ts +4 -0
- package/build/question/options/ImportOpenPluginOptions.d.ts.map +1 -0
- package/build/question/options/ImportOpenPluginOptions.js +54 -0
- package/build/question/options/ImportOpenPluginOptions.js.map +1 -0
- package/build/question/options/index.d.ts +2 -0
- package/build/question/options/index.d.ts.map +1 -1
- package/build/question/options/index.js +2 -0
- package/build/question/options/index.js.map +1 -1
- package/build/question/scaffold/vsc/daProjectTypeNode.d.ts.map +1 -1
- package/build/question/scaffold/vsc/daProjectTypeNode.js +1 -3
- package/build/question/scaffold/vsc/daProjectTypeNode.js.map +1 -1
- package/build/v4/distribution/bundledFloor.d.ts +12 -0
- package/build/v4/distribution/bundledFloor.d.ts.map +1 -0
- package/build/v4/distribution/bundledFloor.js +80 -0
- package/build/v4/distribution/bundledFloor.js.map +1 -0
- package/build/v4/distribution/templateConfig.d.ts +53 -0
- package/build/v4/distribution/templateConfig.d.ts.map +1 -0
- package/build/v4/distribution/templateConfig.js +43 -0
- package/build/v4/distribution/templateConfig.js.map +1 -0
- package/build/v4/distribution/templatePackage.d.ts +29 -0
- package/build/v4/distribution/templatePackage.d.ts.map +1 -0
- package/build/v4/distribution/templatePackage.js +82 -0
- package/build/v4/distribution/templatePackage.js.map +1 -0
- package/build/v4/distribution/templateSource.d.ts +67 -0
- package/build/v4/distribution/templateSource.d.ts.map +1 -0
- package/build/v4/distribution/templateSource.js +220 -0
- package/build/v4/distribution/templateSource.js.map +1 -0
- package/build/v4/distribution/templateSourcePort.d.ts +50 -0
- package/build/v4/distribution/templateSourcePort.d.ts.map +1 -0
- package/build/v4/distribution/templateSourcePort.js +207 -0
- package/build/v4/distribution/templateSourcePort.js.map +1 -0
- package/build/v4/index.d.ts +13 -0
- package/build/v4/index.d.ts.map +1 -0
- package/build/v4/index.js +18 -0
- package/build/v4/index.js.map +1 -0
- package/package.json +4 -4
- package/resource/package.nls.cs.json +9 -1
- package/resource/package.nls.de.json +10 -2
- package/resource/package.nls.es.json +9 -1
- package/resource/package.nls.fr.json +9 -1
- package/resource/package.nls.it.json +10 -2
- package/resource/package.nls.ja.json +9 -1
- package/resource/package.nls.json +10 -13
- package/resource/package.nls.ko.json +9 -1
- package/resource/package.nls.pl.json +10 -2
- package/resource/package.nls.pt-BR.json +9 -1
- package/resource/package.nls.ru.json +10 -2
- package/resource/package.nls.tr.json +11 -3
- package/resource/package.nls.zh-Hans.json +9 -1
- package/resource/package.nls.zh-Hant.json +9 -1
- package/resource/yaml-schema/v1.12/yaml.schema.json +2132 -0
- package/resource/yaml-schema/v1.13/yaml.schema.json +2193 -0
- package/resource/yaml-schema/yaml.schema.json +124 -2
- package/templates/fallback/common.zip +0 -0
- package/templates/fallback/csharp.zip +0 -0
- package/templates/fallback/js.zip +0 -0
- package/templates/fallback/python.zip +0 -0
- package/templates/fallback/ts.zip +0 -0
- package/templates/metadata.zip +0 -0
- package/templates/ui/tdpNode.json +1 -2
- package/templates/ui/wizardNode.json +1 -2
- package/templates/v4/floor.json +3 -0
- package/templates/v4/templates.zip +0 -0
- package/build/core/middleware/projectMigratorV3.d.ts +0 -39
- package/build/core/middleware/projectMigratorV3.d.ts.map +0 -1
- package/build/core/middleware/projectMigratorV3.js +0 -694
- package/build/core/middleware/projectMigratorV3.js.map +0 -1
- package/build/core/middleware/projectVersionChecker.d.ts +0 -3
- package/build/core/middleware/projectVersionChecker.d.ts.map +0 -1
- package/build/core/middleware/projectVersionChecker.js +0 -60
- package/build/core/middleware/projectVersionChecker.js.map +0 -1
- package/build/core/middleware/types.d.ts +0 -9
- package/build/core/middleware/types.d.ts.map +0 -1
- package/build/core/middleware/types.js.map +0 -1
- package/build/core/middleware/utils/MigrationUtils.d.ts +0 -13
- package/build/core/middleware/utils/MigrationUtils.d.ts.map +0 -1
- package/build/core/middleware/utils/MigrationUtils.js +0 -212
- package/build/core/middleware/utils/MigrationUtils.js.map +0 -1
- package/build/core/middleware/utils/appYmlGenerator.d.ts +0 -34
- package/build/core/middleware/utils/appYmlGenerator.d.ts.map +0 -1
- package/build/core/middleware/utils/appYmlGenerator.js +0 -158
- package/build/core/middleware/utils/appYmlGenerator.js.map +0 -1
- package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts +0 -65
- package/build/core/middleware/utils/debug/appLocalYmlGenerator.d.ts.map +0 -1
- package/build/core/middleware/utils/debug/appLocalYmlGenerator.js +0 -61
- package/build/core/middleware/utils/debug/appLocalYmlGenerator.js.map +0 -1
- package/build/core/middleware/utils/debug/constants.d.ts +0 -20
- package/build/core/middleware/utils/debug/constants.d.ts.map +0 -1
- package/build/core/middleware/utils/debug/constants.js +0 -28
- package/build/core/middleware/utils/debug/constants.js.map +0 -1
- package/build/core/middleware/utils/debug/debugMigrationContext.d.ts +0 -14
- package/build/core/middleware/utils/debug/debugMigrationContext.d.ts.map +0 -1
- package/build/core/middleware/utils/debug/debugMigrationContext.js +0 -23
- package/build/core/middleware/utils/debug/debugMigrationContext.js.map +0 -1
- package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts +0 -37
- package/build/core/middleware/utils/debug/debugV3MigrationUtils.d.ts.map +0 -1
- package/build/core/middleware/utils/debug/debugV3MigrationUtils.js +0 -291
- package/build/core/middleware/utils/debug/debugV3MigrationUtils.js.map +0 -1
- package/build/core/middleware/utils/debug/taskMigrator.d.ts +0 -22
- package/build/core/middleware/utils/debug/taskMigrator.d.ts.map +0 -1
- package/build/core/middleware/utils/debug/taskMigrator.js +0 -935
- package/build/core/middleware/utils/debug/taskMigrator.js.map +0 -1
- package/build/core/middleware/utils/migrationContext.d.ts +0 -32
- package/build/core/middleware/utils/migrationContext.d.ts.map +0 -1
- package/build/core/middleware/utils/migrationContext.js +0 -104
- package/build/core/middleware/utils/migrationContext.js.map +0 -1
- /package/build/{core/middleware → component/generator/openPlugin}/types.js +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT license.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.OPEN_PLUGIN_IMPORT_SOURCE = void 0;
|
|
6
|
+
exports.importOpenPlugin = importOpenPlugin;
|
|
7
|
+
exports.stripDisallowedFrontmatter = stripDisallowedFrontmatter;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const teamsfx_api_1 = require("@microsoft/teamsfx-api");
|
|
10
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
11
|
+
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
12
|
+
const path = tslib_1.__importStar(require("path"));
|
|
13
|
+
const globalVars_1 = require("../../../common/globalVars");
|
|
14
|
+
const generator_1 = require("../generator");
|
|
15
|
+
const templateNames_1 = require("../templates/templateNames");
|
|
16
|
+
const iconStrategy_1 = require("./iconStrategy");
|
|
17
|
+
const mapper_1 = require("./mapper");
|
|
18
|
+
const parser_1 = require("./parser");
|
|
19
|
+
exports.OPEN_PLUGIN_IMPORT_SOURCE = "OpenPluginImport";
|
|
20
|
+
/**
|
|
21
|
+
* Import an Open Plugin / Claude Code plugin / Cursor plugin directory into
|
|
22
|
+
* a scaffolded Microsoft 365 Agents Toolkit project. The output is a usable
|
|
23
|
+
* ATK project; run `atk teamsapp package` from inside it to produce the
|
|
24
|
+
* upload zip.
|
|
25
|
+
*
|
|
26
|
+
* Static baseline files (m365agents.yml, README, .gitignore, .vscode, env)
|
|
27
|
+
* come from the `open-plugin-import` template, which ships in the standard
|
|
28
|
+
* template release pipeline and can be updated independently of fx-core.
|
|
29
|
+
* Variable-length outputs (manifest, skill folders, icons) are written as
|
|
30
|
+
* the post-scaffold step here.
|
|
31
|
+
*/
|
|
32
|
+
async function importOpenPlugin(inputs) {
|
|
33
|
+
try {
|
|
34
|
+
if (!inputs.path) {
|
|
35
|
+
return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError(exports.OPEN_PLUGIN_IMPORT_SOURCE, "MissingPluginPath", "--path is required."));
|
|
36
|
+
}
|
|
37
|
+
const parsed = await (0, parser_1.readOpenPluginDir)(inputs.path);
|
|
38
|
+
const { manifest, copyOps, warnings } = (0, mapper_1.mapToTtkProject)(parsed, inputs);
|
|
39
|
+
const defaultOutput = path.join(process.cwd(), parsed.manifest.name);
|
|
40
|
+
const projectPath = path.resolve(inputs.output ?? defaultOutput);
|
|
41
|
+
if (await fs_extra_1.default.pathExists(projectPath)) {
|
|
42
|
+
const entries = await fs_extra_1.default.readdir(projectPath);
|
|
43
|
+
if (entries.length > 0) {
|
|
44
|
+
return (0, teamsfx_api_1.err)(new teamsfx_api_1.UserError(exports.OPEN_PLUGIN_IMPORT_SOURCE, "OutputDirectoryNotEmpty", `Output directory is not empty: ${projectPath}. Choose a different --output path or empty the directory.`));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 1. Scaffold the static baseline from the open-plugin-import template.
|
|
48
|
+
const ctx = (0, globalVars_1.createContext)();
|
|
49
|
+
ctx.templateVariables = { appName: parsed.manifest.name };
|
|
50
|
+
const scaffoldRes = await generator_1.Generator.generateTemplate(ctx, projectPath, templateNames_1.TemplateNames.OpenPluginImport, "common");
|
|
51
|
+
if (scaffoldRes.isErr())
|
|
52
|
+
return (0, teamsfx_api_1.err)(scaffoldRes.error);
|
|
53
|
+
// 2. Post-scaffold: write the dynamic outputs.
|
|
54
|
+
const appPackageDir = path.join(projectPath, "appPackage");
|
|
55
|
+
await fs_extra_1.default.ensureDir(appPackageDir);
|
|
56
|
+
// Manifest (vDevPreview agentSkills/agentConnectors are variable-length).
|
|
57
|
+
await fs_extra_1.default.writeJSON(path.join(appPackageDir, "manifest.json"), manifest, { spaces: 4 });
|
|
58
|
+
// Copy skill folders and (when present) the commands folder.
|
|
59
|
+
for (const op of copyOps) {
|
|
60
|
+
await fs_extra_1.default.copy(op.src, path.join(projectPath, op.destRelative));
|
|
61
|
+
}
|
|
62
|
+
// Strip SKILL.md frontmatter fields that Teams Developer Portal rejects.
|
|
63
|
+
// Allowed: name, description, license, metadata, compatibility.
|
|
64
|
+
await sanitizeSkillFiles(path.join(appPackageDir, "skills"), warnings);
|
|
65
|
+
// Icons.
|
|
66
|
+
await (0, iconStrategy_1.applyIcons)(parsed, appPackageDir, warnings);
|
|
67
|
+
return (0, teamsfx_api_1.ok)({ projectPath, warnings });
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
if (e instanceof teamsfx_api_1.UserError || e instanceof teamsfx_api_1.SystemError) {
|
|
71
|
+
return (0, teamsfx_api_1.err)(e);
|
|
72
|
+
}
|
|
73
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
74
|
+
return (0, teamsfx_api_1.err)(new teamsfx_api_1.SystemError({
|
|
75
|
+
source: exports.OPEN_PLUGIN_IMPORT_SOURCE,
|
|
76
|
+
name: "ImportOpenPluginFailed",
|
|
77
|
+
message,
|
|
78
|
+
displayMessage: message,
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Teams Developer Portal accepts only these SKILL.md frontmatter keys.
|
|
83
|
+
const ALLOWED_SKILL_FRONTMATTER_KEYS = new Set([
|
|
84
|
+
"name",
|
|
85
|
+
"description",
|
|
86
|
+
"license",
|
|
87
|
+
"metadata",
|
|
88
|
+
"compatibility",
|
|
89
|
+
]);
|
|
90
|
+
/**
|
|
91
|
+
* Walk every `skills/<name>/SKILL.md` and remove top-level frontmatter keys
|
|
92
|
+
* that aren't on the M365 allow-list (e.g. Claude-specific `user-invocable`,
|
|
93
|
+
* `argument-hint`). Records each removal as a warning. Files without a
|
|
94
|
+
* frontmatter block are left untouched.
|
|
95
|
+
*/
|
|
96
|
+
async function sanitizeSkillFiles(skillsRoot, warnings) {
|
|
97
|
+
if (!(await fs_extra_1.default.pathExists(skillsRoot)))
|
|
98
|
+
return;
|
|
99
|
+
const entries = await fs_extra_1.default.readdir(skillsRoot, { withFileTypes: true });
|
|
100
|
+
for (const entry of entries) {
|
|
101
|
+
if (!entry.isDirectory())
|
|
102
|
+
continue;
|
|
103
|
+
const skillMd = path.join(skillsRoot, entry.name, "SKILL.md");
|
|
104
|
+
if (!(await fs_extra_1.default.pathExists(skillMd)))
|
|
105
|
+
continue;
|
|
106
|
+
const original = await fs_extra_1.default.readFile(skillMd, "utf8");
|
|
107
|
+
const { content, removedKeys } = stripDisallowedFrontmatter(original);
|
|
108
|
+
if (removedKeys.length > 0) {
|
|
109
|
+
await fs_extra_1.default.writeFile(skillMd, content, "utf8");
|
|
110
|
+
warnings.push(`Removed unsupported SKILL.md frontmatter field(s) from skills/${entry.name}: ${removedKeys.join(", ")}.`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function stripDisallowedFrontmatter(source) {
|
|
115
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---(\r?\n|$)/.exec(source);
|
|
116
|
+
if (!match)
|
|
117
|
+
return { content: source, removedKeys: [] };
|
|
118
|
+
const parsed = js_yaml_1.default.load(match[1]);
|
|
119
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
120
|
+
return { content: source, removedKeys: [] };
|
|
121
|
+
}
|
|
122
|
+
const obj = parsed;
|
|
123
|
+
const removedKeys = [];
|
|
124
|
+
const kept = {};
|
|
125
|
+
for (const key of Object.keys(obj)) {
|
|
126
|
+
if (ALLOWED_SKILL_FRONTMATTER_KEYS.has(key)) {
|
|
127
|
+
kept[key] = obj[key];
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
removedKeys.push(key);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (removedKeys.length === 0)
|
|
134
|
+
return { content: source, removedKeys: [] };
|
|
135
|
+
const dumped = js_yaml_1.default.dump(kept, { lineWidth: -1 }).replace(/\n$/, "");
|
|
136
|
+
const trailing = match[2] || "\n";
|
|
137
|
+
const rebuilt = `---\n${dumped}\n---${trailing}` + source.slice(match[0].length);
|
|
138
|
+
return { content: rebuilt, removedKeys };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=importer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/importer.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAiClC,4CAyEC;AAqCD,gEAyBC;;AAtKD,wDAA0F;AAC1F,gEAA0B;AAC1B,8DAA2B;AAC3B,mDAA6B;AAC7B,2DAA2D;AAC3D,4CAAyC;AACzC,8DAA2D;AAC3D,iDAA4C;AAC5C,qCAA2C;AAC3C,qCAA6C;AAGhC,QAAA,yBAAyB,GAAG,kBAAkB,CAAC;AAO5D;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,gBAAgB,CACpC,MAAoB;IAEpB,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,IAAA,iBAAG,EACR,IAAI,uBAAS,CAAC,iCAAyB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAiB,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAA,wBAAe,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC;QAEjE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAA,iBAAG,EACR,IAAI,uBAAS,CACX,iCAAyB,EACzB,yBAAyB,EACzB,kCAAkC,WAAW,4DAA4D,CAC1G,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,GAAG,GAAG,IAAA,0BAAa,GAAE,CAAC;QAC5B,GAAG,CAAC,iBAAiB,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,qBAAS,CAAC,gBAAgB,CAClD,GAAG,EACH,WAAW,EACX,6BAAa,CAAC,gBAAgB,EAC9B,QAAQ,CACT,CAAC;QACF,IAAI,WAAW,CAAC,KAAK,EAAE;YAAE,OAAO,IAAA,iBAAG,EAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEvD,+CAA+C;QAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,kBAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAElC,0EAA0E;QAC1E,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvF,6DAA6D;QAC7D,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,kBAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEvE,SAAS;QACT,MAAM,IAAA,yBAAU,EAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAElD,OAAO,IAAA,gBAAE,EAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,uBAAS,IAAI,CAAC,YAAY,yBAAW,EAAE,CAAC;YACvD,OAAO,IAAA,iBAAG,EAAC,CAAC,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,IAAA,iBAAG,EACR,IAAI,yBAAW,CAAC;YACd,MAAM,EAAE,iCAAyB;YACjC,IAAI,EAAE,wBAAwB;YAC9B,OAAO;YACP,cAAc,EAAE,OAAO;SACxB,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IAC7C,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,eAAe;CAChB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,KAAK,UAAU,kBAAkB,CAAC,UAAkB,EAAE,QAAkB;IACtE,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO;IAC/C,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAC9C,MAAM,QAAQ,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7C,QAAQ,CAAC,IAAI,CACX,iEACE,KAAK,CAAC,IACR,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/B,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,0BAA0B,CAAC,MAAc;IAIvD,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,MAAM,QAAQ,QAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACjF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ImportInputs, MappedManifest, ParsedOpenPlugin } from "./types";
|
|
2
|
+
export declare const MANIFEST_SCHEMA_URL = "https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json";
|
|
3
|
+
export declare const MANIFEST_VERSION = "devPreview";
|
|
4
|
+
export declare const ACCENT_COLOR = "#4A90D9";
|
|
5
|
+
export declare function mapToTtkProject(parsed: ParsedOpenPlugin, inputs: ImportInputs): MappedManifest;
|
|
6
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/mapper.ts"],"names":[],"mappings":"AAOA,OAAO,EAKL,YAAY,EACZ,cAAc,EAEd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,mBAAmB,8FAC6D,CAAC;AAC9F,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,YAAY,YAAY,CAAC;AAQtC,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,GAAG,cAAc,CAsG9F"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT license.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.ACCENT_COLOR = exports.MANIFEST_VERSION = exports.MANIFEST_SCHEMA_URL = void 0;
|
|
6
|
+
exports.mapToTtkProject = mapToTtkProject;
|
|
7
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
const path = tslib_1.__importStar(require("path"));
|
|
9
|
+
const authorParser_1 = require("./authorParser");
|
|
10
|
+
const deterministicId_1 = require("./deterministicId");
|
|
11
|
+
const textUtils_1 = require("./textUtils");
|
|
12
|
+
exports.MANIFEST_SCHEMA_URL = "https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.schema.json";
|
|
13
|
+
exports.MANIFEST_VERSION = "devPreview";
|
|
14
|
+
exports.ACCENT_COLOR = "#4A90D9";
|
|
15
|
+
const NAME_SHORT_MAX = 30;
|
|
16
|
+
const NAME_FULL_MAX = 100;
|
|
17
|
+
const DESC_SHORT_MAX = 80;
|
|
18
|
+
const DESC_FULL_MAX = 4000;
|
|
19
|
+
const MAX_AGENT_CONNECTORS = 10;
|
|
20
|
+
function mapToTtkProject(parsed, inputs) {
|
|
21
|
+
const warnings = [...parsed.warnings];
|
|
22
|
+
const pj = parsed.manifest;
|
|
23
|
+
const pluginName = pj.name;
|
|
24
|
+
const ext = parsed.atkExtension ?? {};
|
|
25
|
+
if (inputs.packageName !== undefined) {
|
|
26
|
+
warnings.push("--package-name was provided but the devPreview manifest schema does not include 'packageName'; ignored.");
|
|
27
|
+
}
|
|
28
|
+
const author = (0, authorParser_1.parseAuthor)(pj.author);
|
|
29
|
+
const websiteUrl = inputs.websiteUrl ?? ext.developer?.websiteUrl ?? pj.homepage ?? author.url;
|
|
30
|
+
if (!websiteUrl) {
|
|
31
|
+
throw new Error("developer.websiteUrl could not be resolved. Set 'homepage' in plugin.json, 'author.url', or pass --website-url.");
|
|
32
|
+
}
|
|
33
|
+
const privacyUrl = inputs.privacyUrl ?? ext.developer?.privacyUrl;
|
|
34
|
+
if (!privacyUrl) {
|
|
35
|
+
throw new Error("developer.privacyUrl is required. Pass --privacy-url (Open Plugin spec has no equivalent field).");
|
|
36
|
+
}
|
|
37
|
+
const termsUrl = inputs.termsUrl ?? ext.developer?.termsOfUseUrl;
|
|
38
|
+
if (!termsUrl) {
|
|
39
|
+
throw new Error("developer.termsOfUseUrl is required. Pass --terms-url (Open Plugin spec has no equivalent field).");
|
|
40
|
+
}
|
|
41
|
+
const idSeed = inputs.packageName ?? ext.packageName ?? `openplugin:${pluginName}`;
|
|
42
|
+
const appId = inputs.appId ?? ext.id ?? (0, deterministicId_1.deterministicAppId)(idSeed);
|
|
43
|
+
const displayName = (0, textUtils_1.toTitleCaseFromKebab)(pluginName);
|
|
44
|
+
const shortName = ext.name?.short ?? (0, textUtils_1.truncateAtWordBoundary)(displayName, NAME_SHORT_MAX);
|
|
45
|
+
const fullName = ext.name?.full ?? (0, textUtils_1.truncateAtWordBoundary)(displayName, NAME_FULL_MAX);
|
|
46
|
+
const description = pj.description ?? pluginName;
|
|
47
|
+
const shortDesc = ext.description?.short ?? (0, textUtils_1.truncateAtWordBoundary)(description, DESC_SHORT_MAX);
|
|
48
|
+
const fullDesc = ext.description?.full ?? (0, textUtils_1.truncateAtWordBoundary)(description, DESC_FULL_MAX);
|
|
49
|
+
const agentSkills = parsed.skills.map((folder) => ({ folder: `./skills/${folder}` }));
|
|
50
|
+
const agentConnectors = buildAgentConnectors(parsed.mcpServers, pluginName, inputs.defaultAuthType ?? "Auto", ext.agentConnectors, warnings);
|
|
51
|
+
if (agentConnectors.length > MAX_AGENT_CONNECTORS) {
|
|
52
|
+
throw new Error(`Too many MCP servers: ${agentConnectors.length}. The manifest caps agentConnectors at ${MAX_AGENT_CONNECTORS}.`);
|
|
53
|
+
}
|
|
54
|
+
const developer = {
|
|
55
|
+
name: ext.developer?.name ?? author.name ?? "Unknown",
|
|
56
|
+
websiteUrl,
|
|
57
|
+
privacyUrl,
|
|
58
|
+
termsOfUseUrl: termsUrl,
|
|
59
|
+
};
|
|
60
|
+
const accentColor = ext.accentColor ?? exports.ACCENT_COLOR;
|
|
61
|
+
const manifest = {
|
|
62
|
+
$schema: exports.MANIFEST_SCHEMA_URL,
|
|
63
|
+
manifestVersion: ext.manifestVersion ?? exports.MANIFEST_VERSION,
|
|
64
|
+
version: pj.version ?? "1.0.0",
|
|
65
|
+
id: appId,
|
|
66
|
+
};
|
|
67
|
+
manifest.developer = developer;
|
|
68
|
+
manifest.name = { short: shortName, full: fullName };
|
|
69
|
+
manifest.description = { short: shortDesc, full: fullDesc };
|
|
70
|
+
manifest.icons = { color: "color.png", outline: "outline.png" };
|
|
71
|
+
manifest.accentColor = accentColor;
|
|
72
|
+
if (agentSkills.length > 0) {
|
|
73
|
+
manifest.agentSkills = agentSkills;
|
|
74
|
+
}
|
|
75
|
+
if (agentConnectors.length > 0) {
|
|
76
|
+
manifest.agentConnectors = agentConnectors;
|
|
77
|
+
}
|
|
78
|
+
const copyOps = [];
|
|
79
|
+
if (parsed.skillsRoot) {
|
|
80
|
+
for (const skill of parsed.skills) {
|
|
81
|
+
copyOps.push({
|
|
82
|
+
src: path.join(parsed.skillsRoot, skill),
|
|
83
|
+
destRelative: `appPackage/skills/${skill}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (parsed.commandsRoot && parsed.commands.length > 0) {
|
|
88
|
+
copyOps.push({
|
|
89
|
+
src: parsed.commandsRoot,
|
|
90
|
+
destRelative: "appPackage/commands",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return { manifest, copyOps, warnings };
|
|
94
|
+
}
|
|
95
|
+
function buildAgentConnectors(mcpServers, pluginName, defaultAuth, extOverrides, warnings) {
|
|
96
|
+
const out = [];
|
|
97
|
+
const serverNames = Object.keys(mcpServers).sort();
|
|
98
|
+
for (const name of serverNames) {
|
|
99
|
+
const server = mcpServers[name];
|
|
100
|
+
const url = typeof server.url === "string" ? server.url.trim() : "";
|
|
101
|
+
if (!url) {
|
|
102
|
+
warnings.push(`Skipping MCP server '${name}': no URL found (stdio servers require manual localMcpServer configuration).`);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const override = extOverrides?.[name];
|
|
106
|
+
const authType = override?.authorization?.type ?? resolveAuthType(url, defaultAuth);
|
|
107
|
+
const authorization = { type: authType };
|
|
108
|
+
if (authType !== "None") {
|
|
109
|
+
authorization.referenceId =
|
|
110
|
+
override?.authorization?.referenceId ?? `${pluginName}-${name}-auth`;
|
|
111
|
+
}
|
|
112
|
+
const description = override?.description ??
|
|
113
|
+
(typeof server.description === "string" && server.description
|
|
114
|
+
? server.description
|
|
115
|
+
: `Remote MCP server providing tools for ${pluginName}`);
|
|
116
|
+
out.push({
|
|
117
|
+
id: name,
|
|
118
|
+
displayName: override?.displayName ?? `${name} MCP Server`,
|
|
119
|
+
description,
|
|
120
|
+
toolSource: {
|
|
121
|
+
remoteMcpServer: {
|
|
122
|
+
mcpServerUrl: url,
|
|
123
|
+
authorization,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return out;
|
|
129
|
+
}
|
|
130
|
+
function resolveAuthType(url, defaultAuth) {
|
|
131
|
+
if (defaultAuth !== "Auto") {
|
|
132
|
+
return defaultAuth;
|
|
133
|
+
}
|
|
134
|
+
const isHttps = /^https:\/\//i.test(url);
|
|
135
|
+
const isLocal = /localhost|127\.0\.0\.1/.test(url);
|
|
136
|
+
if (isHttps && !isLocal) {
|
|
137
|
+
return "OAuthPluginVault";
|
|
138
|
+
}
|
|
139
|
+
return "None";
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/parser.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAoCjB,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+H/E"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT license.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.readOpenPluginDir = readOpenPluginDir;
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
8
|
+
const path = tslib_1.__importStar(require("path"));
|
|
9
|
+
const MANIFEST_LOCATIONS = [
|
|
10
|
+
{ relPath: ".plugin/plugin.json", kind: "open-plugin" },
|
|
11
|
+
{ relPath: ".claude-plugin/plugin.json", kind: "claude-plugin" },
|
|
12
|
+
{ relPath: ".cursor-plugin/plugin.json", kind: "cursor-plugin" },
|
|
13
|
+
];
|
|
14
|
+
const SKILL_NAME_RE = /^[a-z0-9][a-z0-9-_]*$/;
|
|
15
|
+
const UNMAPPED_FIELDS = [
|
|
16
|
+
"agents",
|
|
17
|
+
"hooks",
|
|
18
|
+
"rules",
|
|
19
|
+
"lspServers",
|
|
20
|
+
"outputStyles",
|
|
21
|
+
];
|
|
22
|
+
function requireStringPathOverride(value, field) {
|
|
23
|
+
if (value === undefined) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
if (typeof value === "string") {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`Open Plugin '${field}' override is set to a non-string value. Only the single-string form ` +
|
|
30
|
+
`(e.g. \"${field}\": \"./custom/path\") is supported by this converter today.`);
|
|
31
|
+
}
|
|
32
|
+
async function readOpenPluginDir(root) {
|
|
33
|
+
const warnings = [];
|
|
34
|
+
const absRoot = path.resolve(root);
|
|
35
|
+
if (!(await fs_extra_1.default.pathExists(absRoot))) {
|
|
36
|
+
throw new Error(`Plugin directory not found: ${absRoot}`);
|
|
37
|
+
}
|
|
38
|
+
// 1. Probe manifest locations.
|
|
39
|
+
let manifestPath;
|
|
40
|
+
let manifestKind;
|
|
41
|
+
for (const loc of MANIFEST_LOCATIONS) {
|
|
42
|
+
const candidate = path.join(absRoot, loc.relPath);
|
|
43
|
+
if (await fs_extra_1.default.pathExists(candidate)) {
|
|
44
|
+
manifestPath = candidate;
|
|
45
|
+
manifestKind = loc.kind;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (!manifestPath || !manifestKind) {
|
|
50
|
+
throw new Error(`No Open Plugin manifest found in ${absRoot}. Looked for: ` +
|
|
51
|
+
MANIFEST_LOCATIONS.map((l) => l.relPath).join(", "));
|
|
52
|
+
}
|
|
53
|
+
const manifest = (await fs_extra_1.default.readJSON(manifestPath));
|
|
54
|
+
if (!manifest.name || typeof manifest.name !== "string") {
|
|
55
|
+
throw new Error(`plugin.json is missing required 'name' field at ${manifestPath}`);
|
|
56
|
+
}
|
|
57
|
+
// 2. MCP servers (with optional path override).
|
|
58
|
+
const mcpRel = requireStringPathOverride(manifest.mcpServers, "mcpServers") ?? ".mcp.json";
|
|
59
|
+
const mcpAbs = path.resolve(absRoot, mcpRel);
|
|
60
|
+
const mcpServers = {};
|
|
61
|
+
if (await fs_extra_1.default.pathExists(mcpAbs)) {
|
|
62
|
+
const mcpJson = (await fs_extra_1.default.readJSON(mcpAbs));
|
|
63
|
+
const source = mcpJson &&
|
|
64
|
+
typeof mcpJson === "object" &&
|
|
65
|
+
mcpJson.mcpServers &&
|
|
66
|
+
typeof mcpJson.mcpServers === "object"
|
|
67
|
+
? mcpJson.mcpServers
|
|
68
|
+
: mcpJson;
|
|
69
|
+
if (source && typeof source === "object") {
|
|
70
|
+
for (const [name, value] of Object.entries(source)) {
|
|
71
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
72
|
+
mcpServers[name] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 3. Skills.
|
|
78
|
+
const skillsRel = requireStringPathOverride(manifest.skills, "skills") ?? "skills";
|
|
79
|
+
const skillsAbs = path.resolve(absRoot, skillsRel);
|
|
80
|
+
const skills = [];
|
|
81
|
+
let skillsRoot;
|
|
82
|
+
if (await fs_extra_1.default.pathExists(skillsAbs)) {
|
|
83
|
+
skillsRoot = skillsAbs;
|
|
84
|
+
const entries = await fs_extra_1.default.readdir(skillsAbs, { withFileTypes: true });
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
if (!entry.isDirectory()) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (!SKILL_NAME_RE.test(entry.name)) {
|
|
90
|
+
warnings.push(`Skipping skill folder '${entry.name}': name does not match ${SKILL_NAME_RE.source}.`);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const skillMd = path.join(skillsAbs, entry.name, "SKILL.md");
|
|
94
|
+
if (await fs_extra_1.default.pathExists(skillMd)) {
|
|
95
|
+
skills.push(entry.name);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
skills.sort();
|
|
99
|
+
}
|
|
100
|
+
// 4. Commands.
|
|
101
|
+
const commandsRel = requireStringPathOverride(manifest.commands, "commands") ?? "commands";
|
|
102
|
+
const commandsAbs = path.resolve(absRoot, commandsRel);
|
|
103
|
+
const commands = [];
|
|
104
|
+
let commandsRoot;
|
|
105
|
+
if (await fs_extra_1.default.pathExists(commandsAbs)) {
|
|
106
|
+
commandsRoot = commandsAbs;
|
|
107
|
+
const entries = await fs_extra_1.default.readdir(commandsAbs, { withFileTypes: true });
|
|
108
|
+
for (const entry of entries) {
|
|
109
|
+
if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
|
|
110
|
+
commands.push(entry.name);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
commands.sort();
|
|
114
|
+
}
|
|
115
|
+
// 5. Unmapped Open Plugin fields → emit a warning so the caller knows we
|
|
116
|
+
// dropped them. We do not throw — the spec says hosts may ignore unknown
|
|
117
|
+
// component types.
|
|
118
|
+
const manifestRecord = manifest;
|
|
119
|
+
for (const field of UNMAPPED_FIELDS) {
|
|
120
|
+
if (manifestRecord[field] !== undefined) {
|
|
121
|
+
warnings.push(`Open Plugin '${field}' field is present but not supported by MOS3 today; dropped.`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// 6. Icons.
|
|
125
|
+
const hasColorPng = await fs_extra_1.default.pathExists(path.join(absRoot, "color.png"));
|
|
126
|
+
const hasOutlinePng = await fs_extra_1.default.pathExists(path.join(absRoot, "outline.png"));
|
|
127
|
+
// 7. Round-trip extension block (written by `atk export openplugin`).
|
|
128
|
+
const atkExtension = readAtkExtensionBlock(manifest);
|
|
129
|
+
return {
|
|
130
|
+
pluginRoot: absRoot,
|
|
131
|
+
manifest,
|
|
132
|
+
manifestPath,
|
|
133
|
+
manifestKind,
|
|
134
|
+
mcpServers,
|
|
135
|
+
skills,
|
|
136
|
+
skillsRoot,
|
|
137
|
+
commands,
|
|
138
|
+
commandsRoot,
|
|
139
|
+
hasColorPng,
|
|
140
|
+
hasOutlinePng,
|
|
141
|
+
warnings,
|
|
142
|
+
atkExtension,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const ATK_EXTENSION_KEY = "x-microsoft-365-agents-toolkit";
|
|
146
|
+
function readAtkExtensionBlock(manifest) {
|
|
147
|
+
const raw = manifest[ATK_EXTENSION_KEY];
|
|
148
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return raw;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a square solid-color RGB PNG of the given size.
|
|
3
|
+
* Produces minimal valid PNG bytes; no external dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generatePlaceholderPng(size: number, r: number, g: number, b: number): Buffer;
|
|
6
|
+
//# sourceMappingURL=placeholderPng.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholderPng.d.ts","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/placeholderPng.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAkC5F"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT license.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.generatePlaceholderPng = generatePlaceholderPng;
|
|
6
|
+
const zlib_1 = require("zlib");
|
|
7
|
+
// PNG file signature.
|
|
8
|
+
const PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
9
|
+
const CRC_TABLE = (() => {
|
|
10
|
+
const table = new Uint32Array(256);
|
|
11
|
+
for (let n = 0; n < 256; n++) {
|
|
12
|
+
let c = n;
|
|
13
|
+
for (let k = 0; k < 8; k++) {
|
|
14
|
+
c = (c & 1) !== 0 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
15
|
+
}
|
|
16
|
+
table[n] = c >>> 0;
|
|
17
|
+
}
|
|
18
|
+
return table;
|
|
19
|
+
})();
|
|
20
|
+
function crc32(data) {
|
|
21
|
+
let crc = 0xffffffff;
|
|
22
|
+
for (let i = 0; i < data.length; i++) {
|
|
23
|
+
crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ data[i]) & 0xff];
|
|
24
|
+
}
|
|
25
|
+
return (crc ^ 0xffffffff) >>> 0;
|
|
26
|
+
}
|
|
27
|
+
function chunk(type, data) {
|
|
28
|
+
const typeBuf = Buffer.from(type, "ascii");
|
|
29
|
+
const lenBuf = Buffer.alloc(4);
|
|
30
|
+
lenBuf.writeUInt32BE(data.length, 0);
|
|
31
|
+
const crcBuf = Buffer.alloc(4);
|
|
32
|
+
crcBuf.writeUInt32BE(crc32(Buffer.concat([typeBuf, data])), 0);
|
|
33
|
+
return Buffer.concat([lenBuf, typeBuf, data, crcBuf]);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate a square solid-color RGB PNG of the given size.
|
|
37
|
+
* Produces minimal valid PNG bytes; no external dependencies.
|
|
38
|
+
*/
|
|
39
|
+
function generatePlaceholderPng(size, r, g, b) {
|
|
40
|
+
if (size <= 0 || !Number.isInteger(size)) {
|
|
41
|
+
throw new Error(`generatePlaceholderPng: size must be a positive integer, got ${size}`);
|
|
42
|
+
}
|
|
43
|
+
const ihdr = Buffer.alloc(13);
|
|
44
|
+
ihdr.writeUInt32BE(size, 0);
|
|
45
|
+
ihdr.writeUInt32BE(size, 4);
|
|
46
|
+
ihdr[8] = 8; // bit depth
|
|
47
|
+
ihdr[9] = 2; // color type RGB
|
|
48
|
+
ihdr[10] = 0; // compression
|
|
49
|
+
ihdr[11] = 0; // filter
|
|
50
|
+
ihdr[12] = 0; // interlace
|
|
51
|
+
const rowBytes = 1 + size * 3;
|
|
52
|
+
const raw = Buffer.alloc(rowBytes * size);
|
|
53
|
+
for (let y = 0; y < size; y++) {
|
|
54
|
+
const rowOffset = y * rowBytes;
|
|
55
|
+
raw[rowOffset] = 0; // none filter
|
|
56
|
+
for (let x = 0; x < size; x++) {
|
|
57
|
+
const pixelOffset = rowOffset + 1 + x * 3;
|
|
58
|
+
raw[pixelOffset] = r;
|
|
59
|
+
raw[pixelOffset + 1] = g;
|
|
60
|
+
raw[pixelOffset + 2] = b;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const idat = (0, zlib_1.deflateSync)(raw);
|
|
64
|
+
return Buffer.concat([
|
|
65
|
+
PNG_SIGNATURE,
|
|
66
|
+
chunk("IHDR", ihdr),
|
|
67
|
+
chunk("IDAT", idat),
|
|
68
|
+
chunk("IEND", Buffer.alloc(0)),
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=placeholderPng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholderPng.js","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/placeholderPng.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truncate `text` to at most `maxLength` characters, preferring a word
|
|
3
|
+
* boundary when the cut would land mid-word. If no usable boundary exists
|
|
4
|
+
* within the first 50% of the limit, falls back to a hard cut.
|
|
5
|
+
*/
|
|
6
|
+
export declare function truncateAtWordBoundary(text: string | undefined, maxLength: number): string;
|
|
7
|
+
/**
|
|
8
|
+
* Convert a kebab-case identifier to a Title Case display name.
|
|
9
|
+
* Empty segments and stray dashes are ignored.
|
|
10
|
+
*/
|
|
11
|
+
export declare function toTitleCaseFromKebab(name: string | undefined): string;
|
|
12
|
+
//# sourceMappingURL=textUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.d.ts","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/textUtils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAgB1F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CASrE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT license.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.truncateAtWordBoundary = truncateAtWordBoundary;
|
|
6
|
+
exports.toTitleCaseFromKebab = toTitleCaseFromKebab;
|
|
7
|
+
/**
|
|
8
|
+
* Truncate `text` to at most `maxLength` characters, preferring a word
|
|
9
|
+
* boundary when the cut would land mid-word. If no usable boundary exists
|
|
10
|
+
* within the first 50% of the limit, falls back to a hard cut.
|
|
11
|
+
*/
|
|
12
|
+
function truncateAtWordBoundary(text, maxLength) {
|
|
13
|
+
if (!text) {
|
|
14
|
+
return "";
|
|
15
|
+
}
|
|
16
|
+
if (text.length <= maxLength) {
|
|
17
|
+
return text;
|
|
18
|
+
}
|
|
19
|
+
const truncated = text.substring(0, maxLength);
|
|
20
|
+
if (/\s/.test(text.charAt(maxLength))) {
|
|
21
|
+
return truncated.trimEnd();
|
|
22
|
+
}
|
|
23
|
+
const lastSpace = truncated.lastIndexOf(" ");
|
|
24
|
+
if (lastSpace > Math.floor(maxLength * 0.5)) {
|
|
25
|
+
return truncated.substring(0, lastSpace).trimEnd();
|
|
26
|
+
}
|
|
27
|
+
return truncated.trimEnd();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Convert a kebab-case identifier to a Title Case display name.
|
|
31
|
+
* Empty segments and stray dashes are ignored.
|
|
32
|
+
*/
|
|
33
|
+
function toTitleCaseFromKebab(name) {
|
|
34
|
+
if (!name) {
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
return name
|
|
38
|
+
.split("-")
|
|
39
|
+
.filter((part) => part.length > 0)
|
|
40
|
+
.map((part) => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())
|
|
41
|
+
.join(" ");
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=textUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../../../src/component/generator/openPlugin/textUtils.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAOlC,wDAgBC;AAMD,oDASC;AApCD;;;;GAIG;AACH,SAAgB,sBAAsB,CAAC,IAAwB,EAAE,SAAiB;IAChF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,IAAwB;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC7E,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|