@communities-webruntime/services
Version:
If you would like to run Lightning Web Runtime without the CLI, we expose some of our programmatic APIs available in Node.js. If you're looking for the CLI documentation [you can find that here](https://www.npmjs.com/package/@communities-webruntime/cli).
106 lines • 3.99 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ModuleResourceService = exports.getResourceUrlFromModule = void 0;
/**
* Copyright (c) 2019, salesforce.com, inc.
* All rights reserved.
* SPDX-License-Identifier: MIT
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
*/
const fs = __importStar(require("fs"));
const api_1 = require("@webruntime/api");
const common_1 = require("@communities-webruntime/common");
/**
* Gets a pre-built resource UID from a module.
*
* @param module the module/package to read from
* @param descriptor the resource descriptor
* @param mode the mode to return
*/
function getResourceUidFromModule(module, descriptor, mode) {
const resources = require(`${module}/dist/resources.json`);
if (!resources[descriptor] || !resources[descriptor][mode]) {
throw new Error(`Cannot find resource ${descriptor} for mode '${mode}'`);
}
return resources[descriptor][mode];
}
/**
* Gets the URL of a pre-built resource from a module.
*
* @param module the module/package to read from
* @param descriptor the resource descriptor
* @param mode the mode to return
*/
function getResourceUrlFromModule(module, descriptor, mode) {
const uid = getResourceUidFromModule(module, descriptor, mode);
const { type, name } = common_1.parseResourceDescriptor(descriptor);
return `/webruntime/${type}/${uid}/${mode}/${name}.js`;
}
exports.getResourceUrlFromModule = getResourceUrlFromModule;
/**
* Reads a pre-built resource from a module.
*
* @param module the module/package to read from
* @param descriptor the resource descriptor
* @param mode the mode to return
* @param resolver used to resolve the resource path
*/
function readResourceFromModule(module, descriptor, mode, resolver = require) {
return fs.readFileSync(resolver.resolve(`${module}/dist/public${getResourceUrlFromModule(module, descriptor, mode)}`), 'utf8');
}
/**
* This service serves a pre-built scripts read from a module's resource.json.
*/
class ModuleResourceService extends api_1.AddressableService {
constructor(module, specifier, descriptor, resourceUri, resolver) {
super(resourceUri);
this.module = module;
this.specifier = specifier;
this.descriptor = descriptor;
this.resourceUri = resourceUri;
this.resolver = resolver;
this.mappings = {
[this.specifier]: this.resourceUri,
};
}
initialize() { }
async request(specifier, { mode }) {
const code = readResourceFromModule(this.module, this.descriptor, mode, this.resolver);
return {
type: api_1.RequestOutputTypes.COMPONENT,
specifier,
resource: {
code,
},
metadata: {
dependencies: [],
},
success: true,
diagnostics: [],
};
}
toSpecifier() {
return this.specifier;
}
}
exports.ModuleResourceService = ModuleResourceService;
//# sourceMappingURL=module-resource-service.js.map