|
1 | 1 | import * as fs from 'fs-extra'; |
2 | 2 | import * as path from 'path'; |
| 3 | +import * as asar from '@electron/asar' |
3 | 4 | import debug from 'debug'; |
4 | 5 | import simpleGit from 'simple-git'; |
5 | 6 | import { createHash } from 'crypto'; |
@@ -95,16 +96,45 @@ export class FiddleFactory { |
95 | 96 | return new Fiddle(path.join(folder, 'main.js'), 'entries'); |
96 | 97 | } |
97 | 98 |
|
98 | | - public async create(src: FiddleSource): Promise<Fiddle | undefined> { |
99 | | - if (src instanceof Fiddle) return src; |
| 99 | + public async create(src: FiddleSource, options?: { packAsAsar?: boolean }): Promise<Fiddle | undefined> { |
| 100 | + let fiddle: Fiddle; |
| 101 | + if (src instanceof Fiddle) { |
| 102 | + fiddle = src; |
| 103 | + } else if (typeof src === 'string') { |
| 104 | + if (fs.existsSync(src)) { |
| 105 | + fiddle = await this.fromFolder(src); |
| 106 | + } else if (/^[0-9A-Fa-f]{32}$/.test(src)) { |
| 107 | + fiddle = await this.fromGist(src); |
| 108 | + } else if (/^https:/.test(src) || /\.git$/.test(src)) { |
| 109 | + fiddle = await this.fromRepo(src); |
| 110 | + } else { |
| 111 | + return; |
| 112 | + } |
| 113 | + } else { |
| 114 | + fiddle = await this.fromEntries(src as Iterable<[string, string]>); |
| 115 | + } |
100 | 116 |
|
101 | | - if (typeof src === 'string') { |
102 | | - if (fs.existsSync(src)) return this.fromFolder(src); |
103 | | - if (/^[0-9A-Fa-f]{32}$/.test(src)) return this.fromGist(src); |
104 | | - if (/^https:/.test(src) || /\.git$/.test(src)) return this.fromRepo(src); |
105 | | - return; |
| 117 | + const { packAsAsar } = options || {}; |
| 118 | + if (packAsAsar){ |
| 119 | + fiddle = await this.packageFiddleAsAsar(fiddle); |
106 | 120 | } |
| 121 | + return fiddle; |
| 122 | + } |
| 123 | + |
| 124 | + private async packageFiddleAsAsar(fiddle: Fiddle) : Promise<Fiddle>{ |
| 125 | + const mainJsPath = fiddle.mainPath; |
| 126 | + const sourceDir = path.dirname(mainJsPath); |
| 127 | + const asarOutputDir = path.join(this.fiddles, hashString(sourceDir)); |
| 128 | + const asarFilePath = path.join(asarOutputDir, "app.asar"); |
107 | 129 |
|
108 | | - return this.fromEntries(src); |
| 130 | + await asar.createPackage(sourceDir, asarFilePath); |
| 131 | + fiddle = new Fiddle(asarFilePath, fiddle.source); |
| 132 | + |
| 133 | + try{ |
| 134 | + await fs.remove(sourceDir); |
| 135 | + } catch (err) { |
| 136 | + console.log("Error deleting unpacked folder:", err); |
| 137 | + } |
| 138 | + return fiddle; |
109 | 139 | } |
110 | 140 | } |
0 commit comments