UNPKG

2.09 kBPlain TextView Raw
1import { SoftwarePackage } from '@stencila/schema'
2
3import PackageGenerator from './PackageGenerator'
4import IUrlFetcher from './IUrlFetcher'
5
6const PACKAGE_JSON_GENERATED = '.package.json'
7const PACKAGE_JSON = 'package.json'
8
9/**
10 * A Dockerfile generator for Javascript projects
11 */
12export default class JavascriptGenerator extends PackageGenerator {
13
14 /**
15 * The major version of Node.js to use.
16 *
17 * Defaults to the latest LTS release
18 */
19 nodeMajorVersion: number
20
21 // Methods that override those in `Generator`
22
23 constructor (urlFetcher: IUrlFetcher, pkg: SoftwarePackage, folder?: string, nodeMajorVersion: number = 10) {
24 super(urlFetcher, pkg, folder)
25
26 this.nodeMajorVersion = nodeMajorVersion
27 }
28
29 applies (): boolean {
30 return this.package.runtimePlatform === 'Node.js'
31 }
32
33 aptKeysCommand (sysVersion: string) {
34 return 'curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -'
35 }
36
37 aptRepos (sysVersion: string): Array<string> {
38 const baseVersionName = this.baseVersionName(sysVersion)
39 return [
40 `deb https://deb.nodesource.com/node_${this.nodeMajorVersion}.x ${baseVersionName} main`
41 ]
42 }
43
44 aptPackages (sysVersion: string): Array<string> {
45 return ['nodejs']
46 }
47
48 stencilaInstall (sysVersion: string): string | undefined {
49 return 'npm install stencila-node@0.28.15'
50 }
51
52 installFiles (sysVersion: string): Array<[string, string]> {
53 // Use any existing 'package.json'
54 if (this.exists(PACKAGE_JSON)) return [[PACKAGE_JSON, PACKAGE_JSON]]
55
56 // Generate a `.package.json` file to copy into image
57 const dependencies: any = {}
58 for (let dependency of this.filterPackages('Node.js')) {
59 dependencies[dependency.name] = dependency.version
60 }
61 const pkgjson = {
62 name: this.package.name || 'unnamed',
63 dependencies
64 }
65 this.write(PACKAGE_JSON_GENERATED, JSON.stringify(pkgjson, null, ' '))
66 return [[PACKAGE_JSON_GENERATED, PACKAGE_JSON]]
67 }
68
69 installCommand (sysVersion: string): string | undefined {
70 return 'npm install package.json'
71 }
72}