1 Commits
0.1.9 ... 0.1.8

Author SHA1 Message Date
Morten Olsen
5e7461c10b feat: switched from worker API to fs based 2024-01-12 14:14:40 +01:00
6 changed files with 17 additions and 47 deletions

View File

@@ -15,19 +15,14 @@ npm install -g @morten-olsen/mini-loader-cli
Now, let's write a basic script that outputs a single artifact named “hello”. Create a new file with the following JavaScript code:
```javascript
import { artifacts } from '@morten-olsen/mini-loader';
import { artifacts } from "@morten-olsen/mini-loader";
const run = async () => {
artifacts.create('hello', 'world');
};
run();
artifacts.create('hello', 'world');
```
Save this file as `script.js`.
Save this file as `script.mjs`.
#### A Note on Dependencies
In this script, we're using the `@morten-olsen/mini-loader` package, which might not be installed in your local environment. No worries though, as mini loader can automatically download necessary packages when preparing the script. Alternatively, for a more structured approach (especially if you're using TypeScript), you can initialize a Node.js project and install the dependencies for complete access to typings.
### Step 3: Run the Script Locally
@@ -35,7 +30,7 @@ In this script, we're using the `@morten-olsen/mini-loader` package, which might
To validate that your script is functioning correctly, execute it locally using the following command:
```bash
mini-loader local run script.js -ai
mini-loader local run script.mjs -ai
```
The `-ai` flag instructs the CLI to automatically download any referenced packages when bundling the script.

View File

@@ -37,7 +37,7 @@ list
order,
});
});
console.table(logs);
console.table(logs.reverse());
});
export { list };

View File

@@ -1,8 +1,5 @@
import { artifacts, logger } from '@morten-olsen/mini-loader';
const run = async () => {
await logger.info('Hello world');
await artifacts.create('foo', 'bar');
};
await logger.info('Hello world');
run();
await artifacts.create('foo', 'bar');

View File

@@ -12,9 +12,11 @@ const connect = () =>
});
});
const connectionRequest = connect();
const send = async (data: any) =>
new Promise<void>(async (resolve, reject) => {
const connection = await connect();
const connection = await connectionRequest;
const cleaned = JSON.parse(JSON.stringify(data));
connection.write(JSON.stringify(cleaned), 'utf-8', (err) => {
if (err) {

View File

@@ -5,7 +5,7 @@ import { Event } from '@morten-olsen/mini-loader';
import { join } from 'path';
import { createServer } from 'http';
import { nanoid } from 'nanoid';
import { chmod, mkdir, rm, writeFile } from 'fs/promises';
import { chmod, mkdir, unlink, writeFile } from 'fs/promises';
type RunEvents = {
message: (event: Event) => void;
@@ -39,13 +39,9 @@ const run = async ({ script, input, secrets }: RunOptions) => {
emitter.emit('message', message);
});
});
server.listen(hostSocket);
const worker = new Worker(script, {
eval: true,
stdin: false,
stdout: false,
stderr: false,
env: {
HOST_SOCKET: hostSocket,
SECRETS: JSON.stringify(secrets),
@@ -56,34 +52,18 @@ const run = async ({ script, input, secrets }: RunOptions) => {
},
});
worker.stdout?.on('data', (data) => {
emitter.emit('message', {
type: 'log',
payload: {
severity: 'info',
message: data.toString(),
},
});
});
worker.stderr?.on('data', (data) => {
emitter.emit('message', {
type: 'log',
payload: {
severity: 'error',
message: data.toString(),
},
});
});
const promise = new Promise<void>((resolve, reject) => {
worker.on('message', (message: Event) => {
emitter.emit('message', message);
});
worker.on('exit', async () => {
server.close();
await rm(dataDir, { recursive: true, force: true });
await unlink(hostSocket);
resolve();
});
worker.on('error', async (error) => {
server.close();
await unlink(hostSocket);
reject(error);
});
});

View File

@@ -27,9 +27,5 @@ program.addCommand(createToken);
await program.parseAsync(process.argv);
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
});
export type { Runtime } from './runtime/runtime.js';
export type { RootRouter } from './router/router.js';