mirror of
https://github.com/morten-olsen/mini-loader.git
synced 2026-02-08 01:36:26 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59d6faaafc |
@@ -15,14 +15,19 @@ 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';
|
||||
|
||||
artifacts.create('hello', 'world');
|
||||
const run = async () => {
|
||||
artifacts.create('hello', 'world');
|
||||
};
|
||||
|
||||
run();
|
||||
```
|
||||
|
||||
Save this file as `script.mjs`.
|
||||
Save this file as `script.js`.
|
||||
|
||||
#### 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
|
||||
@@ -30,7 +35,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.mjs -ai
|
||||
mini-loader local run script.js -ai
|
||||
```
|
||||
|
||||
The `-ai` flag instructs the CLI to automatically download any referenced packages when bundling the script.
|
||||
@@ -41,4 +46,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.
|
||||
|
||||
[Next: Setting Up the Server](./setup-server.md)
|
||||
[Next: Setting Up the Server](./setup-server.md)
|
||||
|
||||
@@ -37,7 +37,7 @@ list
|
||||
order,
|
||||
});
|
||||
});
|
||||
console.table(logs.reverse());
|
||||
console.table(logs);
|
||||
});
|
||||
|
||||
export { list };
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import { artifacts, logger } from '@morten-olsen/mini-loader';
|
||||
|
||||
await logger.info('Hello world');
|
||||
const run = async () => {
|
||||
await logger.info('Hello world');
|
||||
await artifacts.create('foo', 'bar');
|
||||
};
|
||||
|
||||
await artifacts.create('foo', 'bar');
|
||||
run();
|
||||
|
||||
@@ -12,11 +12,9 @@ const connect = () =>
|
||||
});
|
||||
});
|
||||
|
||||
const connectionRequest = connect();
|
||||
|
||||
const send = async (data: any) =>
|
||||
new Promise<void>(async (resolve, reject) => {
|
||||
const connection = await connectionRequest;
|
||||
const connection = await connect();
|
||||
const cleaned = JSON.parse(JSON.stringify(data));
|
||||
connection.write(JSON.stringify(cleaned), 'utf-8', (err) => {
|
||||
if (err) {
|
||||
|
||||
@@ -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, unlink, writeFile } from 'fs/promises';
|
||||
import { chmod, mkdir, rm, writeFile } from 'fs/promises';
|
||||
|
||||
type RunEvents = {
|
||||
message: (event: Event) => void;
|
||||
@@ -39,9 +39,13 @@ 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),
|
||||
@@ -52,18 +56,34 @@ const run = async ({ script, input, secrets }: RunOptions) => {
|
||||
},
|
||||
});
|
||||
|
||||
const promise = new Promise<void>((resolve, reject) => {
|
||||
worker.on('message', (message: Event) => {
|
||||
emitter.emit('message', message);
|
||||
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('exit', async () => {
|
||||
server.close();
|
||||
await unlink(hostSocket);
|
||||
await rm(dataDir, { recursive: true, force: true });
|
||||
resolve();
|
||||
});
|
||||
worker.on('error', async (error) => {
|
||||
server.close();
|
||||
await unlink(hostSocket);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -27,5 +27,9 @@ 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';
|
||||
|
||||
Reference in New Issue
Block a user