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: Now, let's write a basic script that outputs a single artifact named “hello”. Create a new file with the following JavaScript code:
```javascript ```javascript
import { artifacts } from '@morten-olsen/mini-loader'; import { artifacts } from "@morten-olsen/mini-loader";
const run = async () => { artifacts.create('hello', 'world');
artifacts.create('hello', 'world');
};
run();
``` ```
Save this file as `script.js`. Save this file as `script.mjs`.
#### A Note on Dependencies #### 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. 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 ### 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: To validate that your script is functioning correctly, execute it locally using the following command:
```bash ```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. The `-ai` flag instructs the CLI to automatically download any referenced packages when bundling the script.
@@ -46,4 +41,4 @@ After running the command, you should see an output confirming that a new artifa
Congratulations on setting up and running your first script with mini loader! You're now ready to take the next step. Congratulations on setting up and running your first script with mini loader! You're now ready to take the next step.
[Next: Setting Up the Server](./setup-server.md) [Next: Setting Up the Server](./setup-server.md)

View File

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

View File

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

View File

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

View File

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

View File

@@ -27,9 +27,5 @@ program.addCommand(createToken);
await program.parseAsync(process.argv); 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 { Runtime } from './runtime/runtime.js';
export type { RootRouter } from './router/router.js'; export type { RootRouter } from './router/router.js';