fix(core): update
This commit is contained in:
parent
8909149af8
commit
046a0ff55f
2
assets/denoentry.ts
Normal file
2
assets/denoentry.ts
Normal file
@ -0,0 +1,2 @@
|
||||
console.log('Hello from deno');
|
||||
|
@ -22,9 +22,13 @@
|
||||
"@types/node": "^20.8.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"@api.global/typedserver": "^3.0.27",
|
||||
"@push.rocks/lik": "^6.0.14",
|
||||
"@push.rocks/smartarchive": "^4.0.22",
|
||||
"@push.rocks/smartfile": "^11.0.4",
|
||||
"@push.rocks/smartpath": "^5.0.11",
|
||||
"@push.rocks/smartshell": "^3.0.4"
|
||||
"@push.rocks/smartshell": "^3.0.4",
|
||||
"@push.rocks/smartunique": "^3.0.8"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
198
pnpm-lock.yaml
generated
198
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -8,9 +8,13 @@ tap.test('should create a valid smartdeno instance', async () => {
|
||||
});
|
||||
|
||||
tap.test('should download deno', async () => {
|
||||
await testSmartdeno.init({
|
||||
await testSmartdeno.start({
|
||||
forceLocalDeno: true
|
||||
});
|
||||
})
|
||||
|
||||
tap.test('should execute a script', async () => {
|
||||
await testSmartdeno.executeScript(`console.log("A script from deno!")`);
|
||||
})
|
||||
|
||||
tap.start()
|
||||
|
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartdeno',
|
||||
version: '1.0.2',
|
||||
version: '1.0.3',
|
||||
description: 'a module to run deno from node'
|
||||
}
|
||||
|
@ -65,6 +65,9 @@ export class DenoDownloader {
|
||||
} catch (error) {
|
||||
console.error(`Error downloading Deno: ${error.message}`);
|
||||
}
|
||||
if (await plugins.smartfile.fs.fileExists(plugins.path.join(paths.nogitDir, 'deno'))) {
|
||||
return;
|
||||
}
|
||||
const smartarchive = await plugins.smartarchive.SmartArchive.fromArchiveFile(outputPath);
|
||||
const directory = plugins.path.dirname(outputPath);
|
||||
console.log(`Extracting deno.zip to ${directory}`);
|
||||
|
21
ts/classes.denoexecution.ts
Normal file
21
ts/classes.denoexecution.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import type { ScriptServer } from './classes.scriptserver.js';
|
||||
import * as plugins from './plugins.js';
|
||||
|
||||
/* This file contains logic to execute deno commands in an ephermal way */
|
||||
|
||||
export class DenoExecution {
|
||||
public id: string;
|
||||
public scriptserverRef: ScriptServer;
|
||||
public script: string;
|
||||
|
||||
constructor(scriptserverRef: ScriptServer, scriptArg: string) {
|
||||
this.scriptserverRef = scriptserverRef;
|
||||
this.script = scriptArg;
|
||||
this.id = plugins.smartunique.shortId();
|
||||
}
|
||||
|
||||
public async execute() {
|
||||
this.scriptserverRef.executionMap.add(this);
|
||||
await this.scriptserverRef.smartshellInstance.exec(`deno run http://localhost:3210/getscript/${this.id}`)
|
||||
}
|
||||
}
|
31
ts/classes.scriptserver.ts
Normal file
31
ts/classes.scriptserver.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import type { DenoExecution } from './classes.denoexecution.js';
|
||||
import * as plugins from './plugins.js';
|
||||
|
||||
export class ScriptServer {
|
||||
private server: plugins.typedserver.servertools.Server;
|
||||
public smartshellInstance = new plugins.smarthshell.Smartshell({
|
||||
executor: 'bash'
|
||||
});
|
||||
|
||||
public executionMap = new plugins.lik.ObjectMap<DenoExecution>();
|
||||
|
||||
public async start() {
|
||||
this.server = new plugins.typedserver.servertools.Server({
|
||||
port: 3210,
|
||||
cors: true,
|
||||
});
|
||||
this.server.addRoute(
|
||||
'/getscript/:executionId',
|
||||
new plugins.typedserver.servertools.Handler('GET', async (req, res) => {
|
||||
const executionId = req.params.executionId;
|
||||
const denoExecution = await this.executionMap.find(async denoExecutionArg => {
|
||||
return denoExecutionArg.id === executionId;
|
||||
})
|
||||
res.write(denoExecution.script);
|
||||
res.end();
|
||||
})
|
||||
);
|
||||
await this.server.start();
|
||||
}
|
||||
public async stop() {}
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
import { DenoDownloader } from './classes.denodownloader.js';
|
||||
import * as plugins from './plugins.js';
|
||||
import * as paths from './paths.js';
|
||||
import { ScriptServer } from './classes.scriptserver.js';
|
||||
import { DenoExecution } from './classes.denoexecution.js';
|
||||
|
||||
export class SmartDeno {
|
||||
private denoDownloader = new DenoDownloader();
|
||||
private smartshellInstance = new plugins.smarthshell.Smartshell({
|
||||
executor: 'bash'
|
||||
});
|
||||
private scriptServer = new ScriptServer();
|
||||
|
||||
public async init(optionsArg: {
|
||||
public async start(optionsArg: {
|
||||
forceLocalDeno?: boolean;
|
||||
} = {}) {
|
||||
const denoAlreadyInPath = await plugins.smarthshell.which('deno', {
|
||||
@ -17,5 +17,18 @@ export class SmartDeno {
|
||||
if (!denoAlreadyInPath || optionsArg.forceLocalDeno) {
|
||||
await this.denoDownloader.download(plugins.path.join(paths.nogitDir, 'deno.zip'));
|
||||
}
|
||||
await this.scriptServer.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the smartdeno instance
|
||||
*/
|
||||
public async stop() {
|
||||
|
||||
}
|
||||
|
||||
public async executeScript(scriptArg: string) {
|
||||
const denoExecution = new DenoExecution(this.scriptServer, scriptArg);
|
||||
await denoExecution.execute();
|
||||
}
|
||||
}
|
@ -5,13 +5,26 @@ export {
|
||||
path,
|
||||
}
|
||||
|
||||
// @push.rocks scope
|
||||
import * as smartarchive from '@push.rocks/smartarchive';
|
||||
import * as smartpath from '@push.rocks/smartpath';
|
||||
import * as smarthshell from '@push.rocks/smartshell';
|
||||
// @api.global scope
|
||||
import * as typedserver from '@api.global/typedserver';
|
||||
|
||||
export {
|
||||
typedserver,
|
||||
}
|
||||
|
||||
// @push.rocks scope
|
||||
import * as lik from '@push.rocks/lik';
|
||||
import * as smartarchive from '@push.rocks/smartarchive';
|
||||
import * as smartfile from '@push.rocks/smartfile';
|
||||
import * as smartpath from '@push.rocks/smartpath';
|
||||
import * as smarthshell from '@push.rocks/smartshell';
|
||||
import * as smartunique from '@push.rocks/smartunique';
|
||||
|
||||
export {
|
||||
lik,
|
||||
smartarchive,
|
||||
smartfile,
|
||||
smartpath,
|
||||
smarthshell,
|
||||
smartunique,
|
||||
}
|
Loading…
Reference in New Issue
Block a user