Coder Social home page Coder Social logo

bun-js-docker-isolation-provider's Introduction

bun-js-docker-isolation-provider

Quick Start

async ({ data, deep, require }) => {
    //your code
}

or install @archer-lotos/bun-js-tests package in deep

Information about the routes

  • /healthz - GET - 200 - Health check endpoint
    • Response:
      • {}
  • /init - GET - 200 - Initialization endpoint
    • Response:
      • {}
  • /call - GET - 200 - Call executable code of handler in this isolation provider
    • Request:
      • body:
        • params:
          • jwt: STRING - Deeplinks send this token, for create gql and deep client
          • code: STRING - Code of handler
          • data: {} - Data for handler execution from deeplinks

            If this is type handler

            • oldLink - from deeplinks, link before transaction
            • newLink - from deeplinks, link after transaction
            • promiseId - from deeplinks, promise id
    • Response:
      • { resolved?: any; rejected?: any; } - If resolved or rejected is not null, then it's result of execution

Information about params in function

  • deep - Deep Client instance
  • data - Data for handler execution from deeplinks

Examples

async ({ data, deep, require }) => {
    return data;
}
async ({ data, deep, require }) => {
    return await deep.select(1);
}
async ({ data, deep, require }) => {
    return await deep.insert({
        "type_id": 58,
        "from_id": 0,
        "to_id": 0
    });
}

Examples in TypeScript

async ({deep, data}: {
  deep: DeepClient;
  data: {
    newLink: Link<number>;
  };
}) => {
    return await deep.insert({
        "type_id": 58,
        "from_id": 0,
        "to_id": 0
    });
}
async ({deep, data}: {
  deep: DeepClient;
  data: {
    newLink: Link<number>;
  };
}) => {
    return 5
}
async() => {
  const myNumber: number = 5;
  return myNumber
}

Install/Build

npm install
npm ci
docker build -t bun-js-docker-isolation-provider .
docker run -d -p 39100:39100 -e PORT=39100 bun-js-docker-isolation-provider

Bun Build

npx bun build --target=bun ../index.ts --outfile=/index.js

or

npx bun build --compile /index.ts --outfile=/

or

npx bun build --minify --splitting --outdir=out ./index.ts

bun-js-docker-isolation-provider's People

Contributors

archer-lotos avatar freephoenix888 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

bun-js-docker-isolation-provider's Issues

Expected \")\" but found \";\"

Error

{
  "line": 12,
  "stack": "AggregateError: Parse error\n    at <anonymous> (/index.ts:15:57)\n    at makeFunction (/index.ts:32:20)\n    at <anonymous> (/index.ts:78:43)\n    at processTicksAndRejections (:55:39)",
  "column": 44,
  "errors": [
    {
      "message": "Expected \")\" but found \";\""
    },
    {
      "message": "Expected \")\" but found end of file"
    }
  ],
  "message": "Parse error",
  "sourceURL": "/index.ts",
  "originalLine": 12,
  "originalColumn": 44
}

Code

async ({ deep, newLink }) => {
    const { Writable } = await import("stream");
    const { default: winston } = await import("winston");
    const { default: path } = await import("path");
    const zod = await import("zod");
    const ConfigSchema = zod.object({
        repositoryUrl: zod.string(),
        npmToken: zod.string(),
        packageName: zod.string(),
        githubToken: zod.string(),
        githubUsername: zod.string(),
        registry: zod.string().optional().default(`https://registry.npmjs.org/`),
        scope: zod.string().optional(),
        githubProtocol: zod.string().optional().default(`https`),
        githubHost: zod.string().optional().default(`github.com`),
        defaultBranch: zod.string().optional().default('main'),
    });
    let logs = [];
    const stream = new Writable();
    stream._write = (chunk, encoding, next) => {
        logs.push(chunk.toString());
        next();
    };
    const streamTransport = new winston.transports.Stream({ stream });
    const logger = winston.createLogger({ transports: [streamTransport] });
    const fsExtra = await import("fs-extra");
    const { execa } = await import("execa");
    class NpmToGithub {
        async getConfig() {
            const configTypeLinkId = await deep.id(deep.linkId, "Config");
            if (!newLink.from_id) {
                throw new Error(`From and to of ##${newLink.id} should be a link of type ##${configTypeLinkId}). Its value can contain object value with configuration data`);
            }
            const { data: [linkWithConfig] } = await deep.select(newLink.from_id);
            if (!linkWithConfig) {
                throw new Error(`You point to ##${newLink.from_id}, but it does not exist`);
            }
            const config = linkWithConfig.value.value;
            if (!config) {
                throw new Error(`##${linkWithConfig.id} must have a value equal to the repository url`);
            }
            if (typeof config !== "object") {
                throw new Error(`##${linkWithConfig.id} must have a value of type object`);
            }
            return ConfigSchema.parse(config);
        }
        async loginToGithub({ username, token, protocol, host }) {
            await execa(`git`, [`config`, `--global`, `credential.helper`, `store`]);
            await execa('git', ['credential', 'approve'], {
                input: `protocol=${protocol}\nhost=${host}\nusername=${username}\npassword=${token}`,
                shell: true
            });
        }
        async loginToNpm({ registry, scope, token }) {
            await execa("npm", ["login", `--registry=${registry}`, scope ? `--scope=${scope}` : '', `--token=${token}`]);
        }
        async publish() {
            const config = await this.getConfig();
            const { repositoryUrl, registry, scope, npmToken, packageName, defaultBranch, githubHost, githubProtocol, githubToken, githubUsername } = config;
            await this.loginToGithub({
                host: githubHost,
                protocol: githubProtocol,
                token: githubToken,
                username: githubUsername
            });
            await this.loginToNpm({
                registry,
                scope,
                token: npmToken
            });
            const tempDir = await fsExtra.mkdtemp("temp-");
            await execa("npm", ["install", packageName], {
                cwd: tempDir,
            });
            const packagePath = path.join(tempDir, "node_modules", packageName);
            const { stdout: gitInitStdOut } = await execa("git", ["init"], {
                cwd: packagePath,
            });
            logger.info(`gitInitStdOut: ${gitInitStdOut}`);
            const { stdout: gitAddStdOut } = await execa("git", ["add", "--all", "--exclude", "node_modules"], {
                cwd: packagePath,
            });
            logger.info({ gitAddStdOut });
            const { stdout: gitCommitStdOut } = await execa("git", ["commit", "-m", "Initial commit"], {
                cwd: packagePath
            });
            logger.info({ gitCommitStdOut });
            const { stdout: gitRemoteAddOriginStdOut } = await execa("git", ["remote", "add", "origin", repositoryUrl], {
                cwd: packagePath,
            });
            logger.info({ gitRemoteAddOriginStdOut });
            const { stdout: gitPushOriginDefaultBranchStdOut } = await execa("git", ["push", "origin", defaultBranch], {
                cwd: packagePath
            });
            logger.info({ gitPushOriginDefaultBranchStdOut });
        }
    }
    const npmToGithub = new NpmToGithub();
    await npmToGithub.publish();
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibW9kdWxlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUErQyxFQUFFLEVBQUU7SUFDdkUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckQsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQzlCLGFBQWEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQzNCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ3RCLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ3pCLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ3pCLGNBQWMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQzVCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDO1FBQ3hFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzlCLGNBQWMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN4RCxVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENB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O0lBQ3JDLE1BQU0sV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZXBDbGllbnQgfSBmcm9tIFwiQGRlZXAtZm91bmRhdGlvbi9kZWVwbGlua3MvaW1wb3J0cy9jbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgTGluayB9IGZyb20gXCJAZGVlcC1mb3VuZGF0aW9uL2RlZXBsaW5rcy9pbXBvcnRzL21pbmlsaW5rc1wiO1xuaW1wb3J0IHpvZEZvckluZmVyIGZyb20gXCJ6b2RcIjtcblxuYXN5bmMgKHsgZGVlcCwgbmV3TGluayB9OiB7IGRlZXA6IERlZXBDbGllbnQsIG5ld0xpbms6IExpbms8bnVtYmVyPiB9KSA9PiB7XG4gIGNvbnN0IHsgV3JpdGFibGUgfSA9IGF3YWl0IGltcG9ydChcInN0cmVhbVwiKTtcbiAgY29uc3QgeyBkZWZhdWx0OiB3aW5zdG9uIH0gPSBhd2FpdCBpbXBvcnQoXCJ3aW5zdG9uXCIpO1xuICBjb25zdCB7IGRlZmF1bHQ6IHBhdGggfSA9IGF3YWl0IGltcG9ydChcInBhdGhcIik7XG4gIGNvbnN0IHpvZCA9IGF3YWl0IGltcG9ydChcInpvZFwiKTtcbiAgY29uc3QgQ29uZmlnU2NoZW1hID0gem9kLm9iamVjdCh7XG4gICAgcmVwb3NpdG9yeVVybDogem9kLnN0cmluZygpLFxuICAgIG5wbVRva2VuOiB6b2Quc3RyaW5nKCksXG4gICAgcGFja2FnZU5hbWU6IHpvZC5zdHJpbmcoKSxcbiAgICBnaXRodWJUb2tlbjogem9kLnN0cmluZygpLFxuICAgIGdpdGh1YlVzZXJuYW1lOiB6b2Quc3RyaW5nKCksXG4gICAgcmVnaXN0cnk6IHpvZC5zdHJpbmcoKS5vcHRpb25hbCgpLmRlZmF1bHQoYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ApLFxuICAgIHNjb3BlOiB6b2Quc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBnaXRodWJQcm90b2NvbDogem9kLnN0cmluZygpLm9wdGlvbmFsKCkuZGVmYXVsdChgaHR0cHNgKSxcbiAgICBnaXRodWJIb3N0OiB6b2Quc3RyaW5nKCkub3B0aW9uYWwoKS5kZWZhdWx0KGBnaXRodWIuY29tYCksXG4gICAgZGVmYXVsdEJyYW5jaDogem9kLnN0cmluZygpLm9wdGlvbmFsKCkuZGVmYXVsdCgnbWFpbicpLFxuXG4gIH0pXG4gIHR5cGUgQ29uZmlnID0gem9kRm9ySW5mZXIuaW5mZXI8dHlwZW9mIENvbmZpZ1NjaGVtYT47XG4gIFxuXG4gIGxldCBsb2dzOiBBcnJheTxhbnk+ID0gW107XG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBXcml0YWJsZSgpO1xuICBzdHJlYW0uX3dyaXRlID0gKGNodW5rLCBlbmNvZGluZywgbmV4dCkgPT4ge1xuICAgIGxvZ3MucHVzaChjaHVuay50b1N0cmluZygpKTtcbiAgICBuZXh0KCk7XG4gIH07XG5cbiAgY29uc3Qgc3RyZWFtVHJhbnNwb3J0ID0gbmV3IHdpbnN0b24udHJhbnNwb3J0cy5TdHJlYW0oeyBzdHJlYW0gfSk7XG4gIGNvbnN0IGxvZ2dlciA9IHdpbnN0b24uY3JlYXRlTG9nZ2VyKHsgdHJhbnNwb3J0czogW3N0cmVhbVRyYW5zcG9ydF0gfSk7XG5cbiAgY29uc3QgZnNFeHRyYSA9IGF3YWl0IGltcG9ydChcImZzLWV4dHJhXCIpO1xuICBjb25zdCB7IGV4ZWNhIH0gPSBhd2FpdCBpbXBvcnQoXCJleGVjYVwiKTtcblxuXG4gIGNsYXNzIE5wbVRvR2l0aHViIHtcbiAgICBwcml2YXRlIGFzeW5jIGdldENvbmZpZygpOiBQcm9taXNlPENvbmZpZz4ge1xuICAgICAgY29uc3QgY29uZmlnVHlwZUxpbmtJZCA9IGF3YWl0IGRlZXAuaWQoZGVlcC5saW5rSWQhLCBcIkNvbmZpZ1wiKVxuXG4gICAgICBpZighbmV3TGluay5mcm9tX2lkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRnJvbSBhbmQgdG8gb2YgIyMke25ld0xpbmsuaWR9IHNob3VsZCBiZSBhIGxpbmsgb2YgdHlwZSAjIyR7Y29uZmlnVHlwZUxpbmtJZH0pLiBJdHMgdmFsdWUgY2FuIGNvbnRhaW4gb2JqZWN0IHZhbHVlIHdpdGggY29uZmlndXJhdGlvbiBkYXRhYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtkYXRhOiBbbGlua1dpdGhDb25maWddfSA9IGF3YWl0IGRlZXAuc2VsZWN0KG5ld0xpbmsuZnJvbV9pZClcbiAgICAgIGlmKCFsaW5rV2l0aENvbmZpZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSBwb2ludCB0byAjIyR7bmV3TGluay5mcm9tX2lkfSwgYnV0IGl0IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxpbmtXaXRoQ29uZmlnLnZhbHVlLnZhbHVlO1xuICAgICAgaWYoIWNvbmZpZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCMjJHtsaW5rV2l0aENvbmZpZy5pZH0gbXVzdCBoYXZlIGEgdmFsdWUgZXF1YWwgdG8gdGhlIHJlcG9zaXRvcnkgdXJsYCk7XG4gICAgICB9XG4gICAgICBpZih0eXBlb2YgY29uZmlnICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgIyMke2xpbmtXaXRoQ29uZmlnLmlkfSBtdXN0IGhhdmUgYSB2YWx1ZSBvZiB0eXBlIG9iamVjdGApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29uZmlnU2NoZW1hLnBhcnNlKGNvbmZpZyk7XG4gICAgfVxuICAgIGFzeW5jIGxvZ2luVG9HaXRodWIoe3VzZXJuYW1lLCB0b2tlbiwgcHJvdG9jb2wsIGhvc3R9OiB7dXNlcm5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgcHJvdG9jb2w6IHN0cmluZywgaG9zdDogc3RyaW5nfSkge1xuICAgICAgYXdhaXQgZXhlY2EoYGdpdGAsIFtgY29uZmlnYCwgYC0tZ2xvYmFsYCwgYGNyZWRlbnRpYWwuaGVscGVyYCwgYHN0b3JlYF0pXG4gICAgICBhd2FpdCBleGVjYSgnZ2l0JywgWydjcmVkZW50aWFsJywgJ2FwcHJvdmUnXSwge1xuICAgICAgICBpbnB1dDogYHByb3RvY29sPSR7cHJvdG9jb2x9XFxuaG9zdD0ke2hvc3R9XFxudXNlcm5hbWU9JHt1c2VybmFtZX1cXG5wYXNzd29yZD0ke3Rva2VufWAsXG4gICAgICAgIHNoZWxsOiB0cnVlIFxuICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBsb2dpblRvTnBtKHtyZWdpc3RyeSwgc2NvcGUsIHRva2VufToge3JlZ2lzdHJ5OiBzdHJpbmcsIHNjb3BlPzogc3RyaW5nLCB0b2tlbjogc3RyaW5nfSl7XG4gICAgICBhd2FpdCBleGVjYShcIm5wbVwiLCBbXCJsb2dpblwiLCBgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWAsIHNjb3BlID8gYC0tc2NvcGU9JHtzY29wZX1gIDogJycsIGAtLXRva2VuPSR7dG9rZW59YF0pO1xuICAgIH1cbiAgICBhc3luYyBwdWJsaXNoKCkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRDb25maWcoKTtcbiAgICAgIGNvbnN0IHtyZXBvc2l0b3J5VXJsLHJlZ2lzdHJ5LHNjb3BlLG5wbVRva2VuLHBhY2thZ2VOYW1lLCBkZWZhdWx0QnJhbmNoLCBnaXRodWJIb3N0LCBnaXRodWJQcm90b2NvbCxnaXRodWJUb2tlbiwgZ2l0aHViVXNlcm5hbWV9ID0gY29uZmlnO1xuXG4gICAgICBhd2FpdCB0aGlzLmxvZ2luVG9HaXRodWIoe1xuICAgICAgICBob3N0OiBnaXRodWJIb3N0LFxuICAgICAgICBwcm90b2NvbDogZ2l0aHViUHJvdG9jb2wsXG4gICAgICAgIHRva2VuOiBnaXRodWJUb2tlbixcbiAgICAgICAgdXNlcm5hbWU6IGdpdGh1YlVzZXJuYW1lXG4gICAgICB9KVxuICAgICAgXG4gICAgICBhd2FpdCB0aGlzLmxvZ2luVG9OcG0oe1xuICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIHRva2VuOiBucG1Ub2tlblxuICAgICAgfSlcblxuICAgICAgY29uc3QgdGVtcERpciA9IGF3YWl0IGZzRXh0cmEubWtkdGVtcChcInRlbXAtXCIpO1xuICAgICAgYXdhaXQgZXhlY2EoXCJucG1cIiwgW1wiaW5zdGFsbFwiLCBwYWNrYWdlTmFtZV0sIHtcbiAgICAgICAgY3dkOiB0ZW1wRGlyLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcIm5vZGVfbW9kdWxlc1wiLCBwYWNrYWdlTmFtZSk7XG4gICAgXG4gICAgICBjb25zdCB7c3Rkb3V0OiBnaXRJbml0U3RkT3V0fSA9IGF3YWl0IGV4ZWNhKFwiZ2l0XCIsIFtcImluaXRcIl0sIHtcbiAgICAgICAgY3dkOiBwYWNrYWdlUGF0aCxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oYGdpdEluaXRTdGRPdXQ6ICR7Z2l0SW5pdFN0ZE91dH1gKTtcbiAgICBcbiAgICAgIGNvbnN0IHtzdGRvdXQ6IGdpdEFkZFN0ZE91dH0gPSBhd2FpdCBleGVjYShcImdpdFwiLCBbXCJhZGRcIiwgXCItLWFsbFwiLCBcIi0tZXhjbHVkZVwiLCBcIm5vZGVfbW9kdWxlc1wiXSwge1xuICAgICAgICBjd2Q6IHBhY2thZ2VQYXRoLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyh7Z2l0QWRkU3RkT3V0fSk7XG4gICAgXG4gICAgICBjb25zdCB7c3Rkb3V0OiBnaXRDb21taXRTdGRPdXR9ID0gYXdhaXQgZXhlY2EoXCJnaXRcIiwgW1wiY29tbWl0XCIsIFwiLW1cIiwgXCJJbml0aWFsIGNvbW1pdFwiXSwge1xuICAgICAgICBjd2Q6IHBhY2thZ2VQYXRoXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5pbmZvKHtnaXRDb21taXRTdGRPdXR9KTtcbiAgICAgIFxuICAgICAgY29uc3Qge3N0ZG91dDogZ2l0UmVtb3RlQWRkT3JpZ2luU3RkT3V0fSA9IGF3YWl0IGV4ZWNhKFwiZ2l0XCIsIFtcInJlbW90ZVwiLCBcImFkZFwiLCBcIm9yaWdpblwiLCByZXBvc2l0b3J5VXJsXSwge1xuICAgICAgICBjd2Q6IHBhY2thZ2VQYXRoLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyh7Z2l0UmVtb3RlQWRkT3JpZ2luU3RkT3V0fSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHtzdGRvdXQ6IGdpdFB1c2hPcmlnaW5EZWZhdWx0QnJhbmNoU3RkT3V0fSA9IGF3YWl0IGV4ZWNhKFwiZ2l0XCIsIFtcInB1c2hcIiwgXCJvcmlnaW5cIiwgZGVmYXVsdEJyYW5jaF0sIHtcbiAgICAgICAgY3dkOiBwYWNrYWdlUGF0aFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyh7Z2l0UHVzaE9yaWdpbkRlZmF1bHRCcmFuY2hTdGRPdXR9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBucG1Ub0dpdGh1YiA9IG5ldyBOcG1Ub0dpdGh1YigpXG4gIGF3YWl0IG5wbVRvR2l0aHViLnB1Ymxpc2goKTtcbn07XG4iXX0=

Plain eval is used without transpilation. Ts handlers do not work

Description

Plain eval is used without transpilation:

const fn = memoEval(code);

We have to transpile code by using Bun and then eval that code until Bun.eval is developer by bun team (oven-sh/bun#5105)

Example Of Non-Working Typescript Handler

Handler Code

import { DeepClient } from "@deep-foundation/deeplinks/imports/client.js";
import { Link } from "@deep-foundation/deeplinks/imports/minilinks.js";
import { DeepClientInstance } from "@deep-foundation/deeplinks/imports/client";

async (options: {
  deep: DeepClient;
  data: {
    newLink: Link<number>;
  };
}) => {
    return 5
};

Error

{
  "line": 9,
  "stack": "SyntaxError: Unexpected token '{'. import call expects one or two arguments.\n    at eval (native)\n    at memoized (/node_modules/lodash/memoize.js:62:21)\n    at makeFunction (/index.ts:24:20)\n    at <anonymous> (/index.ts:70:43)\n    at processTicksAndRejections (:1:1302)",
  "column": 30,
  "message": "Unexpected token '{'. import call expects one or two arguments.",
  "sourceURL": "/node_modules/lodash/memoize.js",
  "originalLine": 9,
  "originalColumn": 30
}

Additional Information

Non-ts handler is working:

async () => {
  return 5
}

Links in deepcase:
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.