deep-foundation / deep-foundation/bun-js-docker-isolation-provider
Expected \")\" but found \";\"
- Dominant language
- TypeScript
- Stars
- 3
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
# Error
```
{
"line": 12,
"stack": "AggregateError: Parse error\n at (/index.ts:15:57)\n at makeFunction (/index.ts:32:20)\n at (/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
```js
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=
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.