@sphereon/ssi-sdk.dev
Version:
220 lines (214 loc) • 9.06 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
dev: () => dev,
sphereon: () => sphereon
});
module.exports = __toCommonJS(index_exports);
// ../../node_modules/.pnpm/tsup@8.5.1_@microsoft+api-extractor@7.55.0_@types+node@20.19.25__@swc+core@1.15.2_@swc+_119fedc18e19d1717452bb9e989205b3/node_modules/tsup/assets/cjs_shims.js
var getImportMetaUrl = /* @__PURE__ */ __name(() => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href, "getImportMetaUrl");
var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
// src/createCommand.ts
var import_commander2 = require("commander");
var import_module2 = __toESM(require("module"), 1);
// src/dev.ts
var import_api_extractor = require("@microsoft/api-extractor");
var import_api_extractor_model = require("@microsoft/api-extractor-model");
var import_commander = require("commander");
var import_fs = require("fs");
var import_path = require("path");
var TJS = __toESM(require("ts-json-schema-generator"), 1);
var import_module = __toESM(require("module"), 1);
var requireCjs = import_module.default.createRequire(importMetaUrl);
var genericTypes = [
"boolean",
"string",
"number",
"any",
"Array<string>"
];
function createSchema(generator, symbol) {
if (genericTypes.includes(symbol)) {
return {
components: {
schemas: {}
}
};
}
const fixedSymbol = symbol.replace(/Array\<(.*)\>/gm, "$1").replace(/(\\:[\w]?Certificate)/gm, ": any");
const schema = generator.createSchema(fixedSymbol);
const newSchema = {
components: {
schemas: schema.definitions
}
};
let schemaStr = JSON.stringify(newSchema, null, 2);
schemaStr = schemaStr.replace(/#\/definitions\//gm, "#/components/schemas/");
schemaStr = schemaStr.replace(/\"patternProperties\":{([^:]*):{[^}]*}}/gm, '"pattern": $1');
schemaStr = schemaStr.replace(/Verifiable\<(.*)\>/gm, "Verifiable-$1");
schemaStr = schemaStr.replace(/Where\<(.*)\>/gm, "Where-$1");
schemaStr = schemaStr.replace(/Order\<(.*)\>/gm, "Order-$1");
schemaStr = schemaStr.replace(/FindArgs\<(.*)\>/gm, "FindArgs-$1");
schemaStr = schemaStr.replace(/https \:\/\//gm, "https://");
schemaStr = schemaStr.replace(/\{@link\s+([^|}]+?)\s([^|}]+)\s}/g, "{@link $1 | $2 }");
return JSON.parse(schemaStr);
}
__name(createSchema, "createSchema");
function getReference(response) {
if (!response) {
return {
type: "object"
};
}
if (response.slice(0, 6) === "Array<") {
const symbol = response.replace("Array<", "").replace(">", "");
return {
type: "array",
items: genericTypes.includes(symbol) ? {
type: symbol
} : {
$ref: "#/components/schemas/" + symbol
}
};
}
response = response.replace(/(\\:?[\w]*Certificate)/gm, "any");
if (response === "any") {
return {
type: "object"
};
}
if ([
"string",
"number",
"boolean",
"object",
"integer"
].includes(response)) {
return {
type: response
};
} else {
return {
$ref: "#/components/schemas/" + response
};
}
}
__name(getReference, "getReference");
var dev = new import_commander.Command("dev").description("Plugin developer tools");
dev.command("generate-plugin-schema").description("generate plugin schema").option("-c, --extractorConfig <string>", "API Extractor config file", "./api-extractor.json").option("-p, --packageConfig <string>", "package.json file containing a Veramo plugin interface config", "./package.json").action(async (options) => {
const apiExtractorJsonPath = (0, import_path.resolve)(options.extractorConfig);
const extractorConfig = import_api_extractor.ExtractorConfig.loadFileAndPrepare(apiExtractorJsonPath);
const extractorResult = import_api_extractor.Extractor.invoke(extractorConfig, {
localBuild: true,
showVerboseMessages: true,
showDiagnostics: true
});
if (!extractorResult.succeeded) {
console.error(`API Extractor completed with ${extractorResult.errorCount} errors and ${extractorResult.warningCount} warnings`);
process.exitCode = 1;
}
const packageConfig = requireCjs((0, import_path.resolve)(options.packageConfig));
const interfaces = {};
for (const pluginInterfaceName in packageConfig?.veramo?.pluginInterfaces) {
const entryFile = packageConfig.veramo.pluginInterfaces[pluginInterfaceName];
const api = {
components: {
schemas: {},
methods: {}
}
};
const generator = TJS.createGenerator({
path: (0, import_path.resolve)(entryFile),
// tsconfig: resolve('../../tsconfig.json'),
encodeRefs: false,
// additionalProperties: true,
skipTypeCheck: true,
expose: "all",
type: "*"
});
const apiModel = new import_api_extractor_model.ApiModel();
const apiPackage = apiModel.loadPackage(extractorConfig.apiJsonFilePath);
const entry = apiPackage.entryPoints[0];
const pluginInterface = entry.findMembersByName(pluginInterfaceName)[0];
for (const member of pluginInterface.members) {
const method = {};
method.pluginInterfaceName = pluginInterfaceName;
method.operationId = member.displayName;
method.parameters = member.parameters[0]?.parameterTypeExcerpt?.text;
method.response = member.returnTypeExcerpt.text.replace("Promise<", "").replace(">", "");
const methodSignature = member;
method.description = methodSignature.tsdocComment?.summarySection?.getChildNodes()[0]?.getChildNodes()[0]?.text;
method.description = method.description || "";
if (method.parameters) {
api.components.schemas = {
// @ts-ignore
...api.components.schemas,
...createSchema(generator, method.parameters).components.schemas
};
}
api.components.schemas = {
// @ts-ignore
...api.components.schemas,
...createSchema(generator, method.response).components.schemas
};
api.components.methods[method.operationId] = {
description: method.description,
arguments: getReference(method.parameters),
returnType: getReference(method.response)
};
}
interfaces[pluginInterfaceName] = api;
}
(0, import_fs.writeFileSync)((0, import_path.resolve)("./plugin.schema.json"), JSON.stringify(interfaces, null, 2));
});
dev.command("extract-api").description("Extract API").option("-c, --extractorConfig <string>", "API Extractor config file", "./api-extractor.json").action(async (options) => {
const apiExtractorJsonPath = (0, import_path.resolve)(options.extractorConfig);
const extractorConfig = import_api_extractor.ExtractorConfig.loadFileAndPrepare(apiExtractorJsonPath);
const extractorResult = import_api_extractor.Extractor.invoke(extractorConfig, {
localBuild: true
});
if (!extractorResult.succeeded) {
console.error(`API Extractor completed with ${extractorResult.errorCount} errors and ${extractorResult.warningCount} warnings`);
process.exitCode = 1;
}
});
// src/createCommand.ts
var requireCjs2 = import_module2.default.createRequire(importMetaUrl);
var { version } = requireCjs2("../package.json");
var sphereon = new import_commander2.Command("sphereon").version(version, "-v, --version").addCommand(dev);
// src/cli.ts
if (!process.argv.slice(2).length) {
sphereon.outputHelp();
} else {
sphereon.parse(process.argv);
}
//# sourceMappingURL=index.cjs.map