packages/@jsii/java-runtime/BundledRuntime.t.js (77 lines of code) (raw):
const fs = require('fs');
const path = require('path');
const resources = discoverResources();
const entryPoint = 'bin/jsii-runtime.js';
process.stdout.write(`package software.amazon.jsii;
import static software.amazon.jsii.Util.extractResource;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@javax.annotation.Generated(value = "${path.basename(
__filename,
)}", date = "${new Date().toISOString()}")
final class BundledRuntime {
/**
* Extracts all files needed for jsii-runtime.js from JAR into a temporary
* directory.
*
* @param klass the {@link Class} that requests the extraction (it will be
* used to determine the appropriate {@link ClassLoader})
*
* @return The full path for jsii-runtime.js
*/
static String extract(final Class<?> klass) {
try {
final Path directory = Files.createTempDirectory("jsii-java-runtime");
directory.toFile().deleteOnExit();
${resources.map(extractResource).map(indent(12)).join('\n')}
return entrypoint.toString();
} catch (final IOException ioe) {
throw new JsiiError("Unable to extract bundled @jsii/runtime library", ioe);
}
}
private BundledRuntime() {}
}
`);
function discoverResources(
root = path.resolve(
__dirname,
'project',
'src',
'main',
'resources',
'software',
'amazon',
'jsii',
),
dir = '.',
) {
const result = [];
for (const file of fs.readdirSync(path.resolve(root, dir))) {
// Ignore dot-files
if (file.startsWith('.')) {
continue;
}
const stat = fs.statSync(path.resolve(root, dir, file));
if (stat.isDirectory()) {
result.push(...discoverResources(root, path.join(dir, file)));
continue;
}
result.push(path.join(dir, file));
}
return result;
}
function extractResource(name) {
const call = `extractResource(klass, "${name}", directory)`;
if (name === entryPoint) {
return [
`final Path entrypoint = ${call};`,
`entrypoint.toFile().deleteOnExit();`,
].join('\n');
} else {
return `${call}.toFile().deleteOnExit();`;
}
}
function indent(count) {
const spaces = ' '.repeat(count);
return (str) => str.replace(/^/gm, spaces);
}