vite-custom-functions-metadata
Version:
Vite plugin for generating and injecting Custom Functions metadata
123 lines (122 loc) • 5.27 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 __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, {
customFunctionsMetadataPlugin: () => customFunctionsMetadataPlugin,
default: () => index_default
});
module.exports = __toCommonJS(index_exports);
var import_custom_functions_metadata = require("custom-functions-metadata");
var import_path = __toESM(require("path"), 1);
var import_promises = __toESM(require("fs/promises"), 1);
var CustomFunctionsMetadataPlugin = class {
};
CustomFunctionsMetadataPlugin.generateResults = {};
function customFunctionsMetadataPlugin(options) {
let config;
let resolvedInputFiles = [];
let generateResult;
return {
name: "vite:custom-functions-metadata",
configResolved(resolvedConfig) {
config = resolvedConfig;
resolvedInputFiles = Array.isArray(options.input) ? options.input.map((file) => import_path.default.resolve(file)) : [import_path.default.resolve(options.input)];
},
async buildStart() {
try {
generateResult = await (0, import_custom_functions_metadata.generateCustomFunctionsMetadata)(resolvedInputFiles, true);
if (generateResult.errors.length > 0) {
generateResult.errors.forEach((err) => {
this.error(new Error(`${options.input} ${err}`));
});
} else {
CustomFunctionsMetadataPlugin.generateResults[Array.isArray(options.input) ? options.input[0] : options.input] = generateResult;
}
} catch (error) {
this.error(new Error(`Failed to generate metadata: ${error.message}`));
}
},
async transform(code, id) {
const foundInputFile = resolvedInputFiles.find((file) => id.endsWith(file));
if (!foundInputFile) {
return null;
}
const inputKey = Array.isArray(options.input) ? options.input[0] : options.input;
if (!CustomFunctionsMetadataPlugin.generateResults[inputKey]) {
return code;
}
const associations = CustomFunctionsMetadataPlugin.generateResults[inputKey].associate.filter(
(item) => item.sourceFileName === foundInputFile
);
let transformedCode = code;
associations.forEach((item) => {
transformedCode += `
CustomFunctions.associate("${item.id}", ${item.functionName});`;
});
return transformedCode;
},
async writeBundle() {
if (generateResult && !generateResult.errors.length) {
const outputPath = import_path.default.resolve(config.build.outDir, options.output);
try {
await import_promises.default.mkdir(import_path.default.dirname(outputPath), { recursive: true });
await import_promises.default.writeFile(outputPath, generateResult.metadataJson);
} catch (error) {
this.error(`Failed to write metadata file: ${error.message}`);
}
}
},
configureServer(server) {
return () => {
server.middlewares.use(async (req, res, next) => {
if (generateResult && !generateResult.errors.length && req.url?.endsWith(options.output)) {
const outputPath = import_path.default.resolve(server.config.root, options.output);
try {
await import_promises.default.mkdir(import_path.default.dirname(outputPath), { recursive: true });
await import_promises.default.writeFile(outputPath, generateResult.metadataJson);
res.setHeader("Content-Type", "application/json");
res.end(generateResult.metadataJson);
return;
} catch (error) {
console.error(`Failed to write metadata file: ${error.message}`);
}
}
next();
});
};
}
};
}
var index_default = customFunctionsMetadataPlugin;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
customFunctionsMetadataPlugin
});
//# sourceMappingURL=index.cjs.map