@typed/content-hash
Version:
Content hash a directory of HTML/JS/CSS files and other static assets
91 lines • 3.13 kB
JavaScript
#! /usr/bin/env node
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const function_1 = require("fp-ts/function");
const Option_1 = require("fp-ts/Option");
const fs_1 = require("fs");
const path_1 = require("path");
const typescript_1 = require("typescript");
const yargs_1 = (0, tslib_1.__importDefault)(require("yargs"));
const content_hashes_1 = require("../content-hashes");
const findTsConfig_1 = require("./findTsConfig");
const options = yargs_1.default
.options('directory', {
alias: 'dir',
type: 'string',
demandOption: true,
description: 'The directory to apply content hashes',
})
.options('assetManifest', {
type: 'string',
default: 'asset-manifest.json',
description: 'Filename of asset manifest JSON',
})
.options('hashLength', {
alias: 'h',
type: 'number',
description: 'Number of characters to slice from SHA-512 hash',
})
.options('tsConfig', {
type: 'string',
default: 'tsconfig.json',
description: 'Relative path to tsconfig from CWD',
})
.options('baseUrl', {
type: 'string',
description: 'Base URL to use when rewriting imports/exports',
})
.options('logLevel', {
type: 'string',
choices: ['debug', 'info', 'error'],
default: 'info',
})
.options('registryFile', {
type: 'string',
description: 'Configure where to write Document Registry to JSON. Useful for debugging',
})
.options('sourceMaps', {
type: 'boolean',
default: true,
})
.options('mainFields', {
type: 'array',
default: ['module'],
description: 'Configure package.json fields to look for dependencies',
})
.help().argv;
function getLogLevel(option) {
switch (option) {
case 'debug':
return content_hashes_1.LogLevel.Debug;
case 'error':
return content_hashes_1.LogLevel.Error;
default:
return content_hashes_1.LogLevel.Info;
}
}
const directory = path_1.posix.resolve(process.cwd(), options.directory);
if (!(0, fs_1.existsSync)(directory) || !(0, fs_1.statSync)(directory).isDirectory()) {
throw new Error(`Unable to find valid directory at ${directory}`);
}
const tsConfig = (0, findTsConfig_1.findTsConfig)({ directory: process.cwd(), configFileName: options.tsConfig });
(0, content_hashes_1.contentHashDirectory)({
directory,
hashLength: (_a = options.hashLength) !== null && _a !== void 0 ? _a : Infinity,
assetManifest: path_1.posix.resolve(directory, options.assetManifest),
baseUrl: options.baseUrl,
plugins: (0, content_hashes_1.createDefaultPlugins)({
mainFields: options.mainFields,
buildDirectory: directory,
compilerOptions: (0, function_1.pipe)(tsConfig, (0, Option_1.map)((t) => t.compilerOptions), (0, Option_1.getOrElse)(typescript_1.getDefaultCompilerOptions)),
}),
logLevel: getLogLevel(options.logLevel),
registryFile: options.registryFile,
sourceMaps: options.sourceMaps,
}).catch((error) => {
console.error(error);
process.exit(1);
});
//# sourceMappingURL=content-hash.js.map