@lwrjs/shared-utils
Advanced tools
Comparing version 0.0.1 to 0.0.2-alpha1
/// <reference types="node" /> | ||
import { VirtualModuleEntry, ModuleEntry, ApplicationMode, ModeConfig } from '@lwrjs/types'; | ||
import { ApplicationMode, ModeConfig, ModuleDefinition, ModuleEntry, ModuleJsonDefinition, ModuleRegistry, RuntimeContext, VirtualModuleEntry } from '@lwrjs/types'; | ||
interface SpecifierConfig { | ||
@@ -17,5 +17,21 @@ name: string; | ||
export declare function isVirtualModuleEntry(moduleEntry: ModuleEntry): moduleEntry is VirtualModuleEntry; | ||
/** | ||
* Take a Module Definition and return its JSON serialization | ||
* | ||
* @param code - the compiled code string for the given module | ||
* @param param1 - the Module Definition to serialize | ||
* @param moduleRegistry | ||
* @param context - runtime context | ||
* @returns - Promise to the JSON serialization of the module | ||
*/ | ||
export declare function serializeModuleToJson(code: string | undefined, { name, namespace, version, ownHash, moduleDefinition: { format, moduleRecord: { imports }, }, }: ModuleDefinition, moduleRegistry: ModuleRegistry, context: RuntimeContext): Promise<ModuleJsonDefinition>; | ||
export declare function resolveFileExtension(filePath: string): string; | ||
/** | ||
* Deep freeze an object | ||
* | ||
* @param obj - object to freeze | ||
* @param maxDepth - the number of levels to recurse | ||
*/ | ||
export declare function deepFreeze(obj: any, maxDepth?: number): any; | ||
export {}; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.deepFreeze = exports.resolveFileExtension = exports.isVirtualModuleEntry = exports.readFile = exports.hashContent = exports.normalizeVersionFromUri = exports.normalizeVersionToUri = exports.explodeMode = exports.explodeName = exports.explodeSpecifier = exports.getSpecifier = exports.DEFAULT_NAMESPACE = void 0; | ||
exports.deepFreeze = exports.resolveFileExtension = exports.serializeModuleToJson = exports.isVirtualModuleEntry = exports.readFile = exports.hashContent = exports.normalizeVersionFromUri = exports.normalizeVersionToUri = exports.explodeMode = exports.explodeName = exports.explodeSpecifier = exports.getSpecifier = exports.DEFAULT_NAMESPACE = void 0; | ||
const fs_1 = __importDefault(require("fs")); | ||
@@ -70,2 +70,45 @@ const path_1 = __importDefault(require("path")); | ||
exports.isVirtualModuleEntry = isVirtualModuleEntry; | ||
// Given a Module Identifier, return a JSON entry | ||
async function createJsonModule(moduleId, moduleRegistry, context) { | ||
const specifier = getSpecifier({ namespace: moduleId.namespace, name: moduleId.name }); | ||
const { version } = await moduleRegistry.getModuleEntry({ specifier }); | ||
const { ownHash } = await moduleRegistry.getModuleSource(moduleId, context); | ||
return { | ||
specifier, | ||
version, | ||
ownHash, | ||
signature: ownHash, | ||
links: { | ||
self: moduleRegistry.resolveModuleUri(moduleId, context, ownHash), | ||
}, | ||
}; | ||
} | ||
/** | ||
* Take a Module Definition and return its JSON serialization | ||
* | ||
* @param code - the compiled code string for the given module | ||
* @param param1 - the Module Definition to serialize | ||
* @param moduleRegistry | ||
* @param context - runtime context | ||
* @returns - Promise to the JSON serialization of the module | ||
*/ | ||
async function serializeModuleToJson(code = '', { name, namespace, version, ownHash, moduleDefinition: { format, moduleRecord: { imports = [] }, }, }, moduleRegistry, context) { | ||
// Build the dependencies array | ||
const dependencies = imports.map(({ namespace, name, version }) => createJsonModule({ | ||
namespace, | ||
name, | ||
version, | ||
resourceType: 'module', | ||
}, moduleRegistry, context)); | ||
return { | ||
specifier: getSpecifier({ namespace, name }), | ||
version, | ||
ownHash, | ||
dependencies: await Promise.all(dependencies), | ||
format, | ||
minified: context.minify, | ||
code, | ||
}; | ||
} | ||
exports.serializeModuleToJson = serializeModuleToJson; | ||
function resolveFileExtension(filePath) { | ||
@@ -99,4 +142,3 @@ const fileName = path_1.default.basename(filePath); | ||
exports.resolveFileExtension = resolveFileExtension; | ||
// deep freeze the given object | ||
function _deepFreeze(p, obj, maxDepth, depth) { | ||
function _deepFreeze(obj, maxDepth, depth) { | ||
if (depth < maxDepth) { | ||
@@ -106,3 +148,3 @@ Object.keys(obj).forEach((prop) => { | ||
if (typeof value === 'object' && !Object.isFrozen(value)) { | ||
_deepFreeze(prop, value, maxDepth, depth + 1); | ||
_deepFreeze(value, maxDepth, depth + 1); | ||
} | ||
@@ -113,6 +155,12 @@ }); | ||
} | ||
/** | ||
* Deep freeze an object | ||
* | ||
* @param obj - object to freeze | ||
* @param maxDepth - the number of levels to recurse | ||
*/ | ||
function deepFreeze(obj, maxDepth = 5) { | ||
return _deepFreeze('root', obj, maxDepth, 0); | ||
return _deepFreeze(obj, maxDepth, 0); | ||
} | ||
exports.deepFreeze = deepFreeze; | ||
//# sourceMappingURL=index.js.map |
@@ -7,3 +7,3 @@ { | ||
}, | ||
"version": "0.0.1", | ||
"version": "0.0.2-alpha1", | ||
"types": "build/index.d.ts", | ||
@@ -15,3 +15,3 @@ "main": "build/index.js", | ||
], | ||
"gitHead": "638109b1e3e85483bc63c87ed2a6c3d582f28e04" | ||
"gitHead": "ae4583dba86a00596d3641f60144d8c1f39a0d78" | ||
} |
8345
196