1 | import { SoftwarePackage } from '@stencila/schema'
|
2 |
|
3 | import PackageGenerator from './PackageGenerator'
|
4 | import IUrlFetcher from './IUrlFetcher'
|
5 |
|
6 | const PACKAGE_JSON_GENERATED = '.package.json'
|
7 | const PACKAGE_JSON = 'package.json'
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | export default class JavascriptGenerator extends PackageGenerator {
|
13 |
|
14 | |
15 |
|
16 |
|
17 |
|
18 |
|
19 | nodeMajorVersion: number
|
20 |
|
21 |
|
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 |
|
54 | if (this.exists(PACKAGE_JSON)) return [[PACKAGE_JSON, PACKAGE_JSON]]
|
55 |
|
56 |
|
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 | }
|