From 28bab6b7c4783af895c18e54b40280a15773f310 Mon Sep 17 00:00:00 2001 From: Pileks Date: Wed, 26 Oct 2022 17:15:47 +0200 Subject: [PATCH 01/29] CLI - remove codegen step from build command --- packages/cli/src/commands/build.ts | 9 --------- packages/cli/src/lib/Compiler.ts | 9 +-------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 1dd9bd818c..f26fbada46 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -14,7 +14,6 @@ import { parseManifestFileOption, parseLogFileOption, } from "../lib"; -import { CodeGenerator } from "../lib/codegen"; import { DockerVMBuildStrategy, BuildStrategy, @@ -39,7 +38,6 @@ type BuildCommandOptions = { manifestFile: string; outputDir: string; clientConfig: Partial; - codegen: boolean; // defaults to true watch?: boolean; strategy: SupportedStrategies; verbose?: boolean; @@ -69,7 +67,6 @@ export const build: Command = { `-c, --client-config <${intlMsg.commands_common_options_configPath()}>`, `${intlMsg.commands_common_options_config()}` ) - .option(`-n, --no-codegen`, `${intlMsg.commands_build_options_n()}`) .option( `-s, --strategy <${strategyStr}>`, `${intlMsg.commands_build_options_s()}`, @@ -140,7 +137,6 @@ async function run(options: BuildCommandOptions) { outputDir, clientConfig, strategy, - codegen, verbose, quiet, logFile, @@ -168,16 +164,11 @@ async function run(options: BuildCommandOptions) { }); const execute = async (): Promise => { - const codeGenerator = codegen - ? new CodeGenerator({ project, schemaComposer }) - : undefined; - const compiler = new Compiler({ project, outputDir, schemaComposer, buildStrategy, - codeGenerator, }); const result = await compiler.compile(); diff --git a/packages/cli/src/lib/Compiler.ts b/packages/cli/src/lib/Compiler.ts index 3e394a07c4..c6323a26cd 100644 --- a/packages/cli/src/lib/Compiler.ts +++ b/packages/cli/src/lib/Compiler.ts @@ -13,7 +13,6 @@ import { logActivity, } from "./"; import { BuildStrategy } from "./build-strategies/BuildStrategy"; -import { CodeGenerator } from "./codegen/CodeGenerator"; import { WasmWrapper, WrapImports } from "@polywrap/wasm-js"; import { AsyncWasmInstance } from "@polywrap/asyncify-js"; @@ -24,7 +23,6 @@ import path from "path"; export interface CompilerConfig { outputDir: string; project: PolywrapProject; - codeGenerator?: CodeGenerator; buildStrategy: BuildStrategy; schemaComposer: SchemaComposer; } @@ -33,7 +31,7 @@ export class Compiler { constructor(private _config: CompilerConfig) {} public async compile(): Promise { - const { project, codeGenerator } = this._config; + const { project } = this._config; const run = async (): Promise => { // Init & clean output directory @@ -43,11 +41,6 @@ export class Compiler { await this._outputWrapManifest(); if (!(await this._isInterface())) { - // Generate the bindings - if (codeGenerator) { - await codeGenerator.generate(); - } - // Compile the Wrapper await this._buildModules(); } From 5ed6d35e5635e67c6826f9e2736efbd9f5f46172 Mon Sep 17 00:00:00 2001 From: Pileks Date: Wed, 26 Oct 2022 18:14:43 +0200 Subject: [PATCH 02/29] CLI - WIP support for plugin build, remove plugin build step from codegen --- packages/cli/src/commands/build.ts | 167 ++++++++++++++++----------- packages/cli/src/commands/codegen.ts | 34 ------ 2 files changed, 99 insertions(+), 102 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index f26fbada46..a2a6b71291 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -13,6 +13,10 @@ import { parseClientConfigOption, parseManifestFileOption, parseLogFileOption, + getProjectFromManifest, + isPolywrapManifestLanguage, + isPluginManifestLanguage, + generateWrapFile, } from "../lib"; import { DockerVMBuildStrategy, @@ -22,6 +26,7 @@ import { LocalBuildStrategy, } from "../lib/build-strategies"; +import fs from "fs"; import path from "path"; import readline from "readline"; import { PolywrapClient } from "@polywrap/client-js"; @@ -146,96 +151,122 @@ async function run(options: BuildCommandOptions) { // Get Client const client = new PolywrapClient(clientConfig); - const project = new PolywrapProject({ - rootDir: path.dirname(manifestFile), - polywrapManifestPath: manifestFile, - logger, - }); - await project.validate(); + const project = await getProjectFromManifest(manifestFile, logger); - const polywrapManifest = await project.getManifest(); - await validateManifestModules(polywrapManifest); + if (!project) { + return; + } - const buildStrategy = createBuildStrategy(strategy, outputDir, project); + await project.validate(); + const manifest = await project.getManifest(); + const language = manifest.project.type; + const schemaComposer = new SchemaComposer({ project, client, }); - const execute = async (): Promise => { - const compiler = new Compiler({ - project, + if (isPolywrapManifestLanguage(language)) { + await validateManifestModules(manifest as PolywrapManifest); + + const buildStrategy = createBuildStrategy( + strategy, outputDir, - schemaComposer, - buildStrategy, - }); + project as PolywrapProject + ); - const result = await compiler.compile(); + const execute = async (): Promise => { + const compiler = new Compiler({ + project: project as PolywrapProject, + outputDir, + schemaComposer, + buildStrategy, + }); - if (!result) { - return result; - } + const result = await compiler.compile(); - return true; - }; + if (!result) { + return result; + } - if (!watch) { - const result = await execute(); + return true; + }; - if (!result) { - process.exit(1); - } - } else { - // Execute - await execute(); - - const keyPressListener = () => { - // Watch for escape key presses - logger.info( - `${intlMsg.commands_build_keypressListener_watching()}: ${project.getManifestDir()}` - ); - logger.info(intlMsg.commands_build_keypressListener_exit()); - readline.emitKeypressEvents(process.stdin); - process.stdin.on("keypress", async (str, key) => { - if ( - key.name == "escape" || - key.name == "q" || - (key.name == "c" && key.ctrl) - ) { - await watcher.stop(); - process.kill(process.pid, "SIGINT"); - } - }); + if (!watch) { + const result = await execute(); - if (process.stdin.setRawMode) { - process.stdin.setRawMode(true); + if (!result) { + process.exit(1); } + } else { + // Execute + await execute(); - process.stdin.resume(); - }; + const keyPressListener = () => { + // Watch for escape key presses + logger.info( + `${intlMsg.commands_build_keypressListener_watching()}: ${project.getManifestDir()}` + ); + logger.info(intlMsg.commands_build_keypressListener_exit()); + readline.emitKeypressEvents(process.stdin); + process.stdin.on("keypress", async (str, key) => { + if ( + key.name == "escape" || + key.name == "q" || + (key.name == "c" && key.ctrl) + ) { + await watcher.stop(); + process.kill(process.pid, "SIGINT"); + } + }); + + if (process.stdin.setRawMode) { + process.stdin.setRawMode(true); + } - keyPressListener(); + process.stdin.resume(); + }; - // Watch the directory - const watcher = new Watcher(); + keyPressListener(); - watcher.start(project.getManifestDir(), { - ignored: [outputDir + "/**", project.getManifestDir() + "/**/wrap/**"], - ignoreInitial: true, - execute: async (events: WatchEvent[]) => { - // Log all of the events encountered - for (const event of events) { - logger.info(`${watchEventName(event.type)}: ${event.path}`); - } + // Watch the directory + const watcher = new Watcher(); + + watcher.start(project.getManifestDir(), { + ignored: [outputDir + "/**", project.getManifestDir() + "/**/wrap/**"], + ignoreInitial: true, + execute: async (events: WatchEvent[]) => { + // Log all of the events encountered + for (const event of events) { + logger.info(`${watchEventName(event.type)}: ${event.path}`); + } - // Execute the build - await execute(); + // Execute the build + await execute(); - // Process key presses - keyPressListener(); - }, - }); + // Process key presses + keyPressListener(); + }, + }); + } + } else if (isPluginManifestLanguage(language)){ + // Output the built manifest + const manifestPath = path.join(outputDir, "wrap.info"); + + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir); + } + + await generateWrapFile( + await schemaComposer.getComposedAbis(), + await project.getName(), + "plugin", + manifestPath, + logger + ); + } else { + console.log("Unsupported project type!"); } process.exit(0); diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 49e4d9bced..b6c5690970 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -10,8 +10,6 @@ import { parseManifestFileOption, parseClientConfigOption, getProjectFromManifest, - isPluginManifestLanguage, - generateWrapFile, defaultProjectManifestFiles, defaultPolywrapManifest, parseLogFileOption, @@ -19,12 +17,9 @@ import { import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; import { PolywrapClient } from "@polywrap/client-js"; -import path from "path"; -import fs from "fs"; import { ClientConfig } from "@polywrap/client-config-builder-js"; const defaultCodegenDir = "./src/wrap"; -const defaultPublishDir = "./build"; const pathStr = intlMsg.commands_codegen_options_o_path(); const defaultManifestStr = defaultPolywrapManifest.join(" | "); @@ -32,7 +27,6 @@ const defaultManifestStr = defaultPolywrapManifest.join(" | "); type CodegenCommandOptions = { manifestFile: string; codegenDir: string; - publishDir: string; script?: string; clientConfig: Partial; verbose?: boolean; @@ -58,12 +52,6 @@ export const codegen: Command = { default: defaultCodegenDir, })}` ) - .option( - `-p, --publish-dir <${pathStr}>`, - `${intlMsg.commands_codegen_options_publish({ - default: defaultPublishDir, - })}` - ) .option( `-s, --script <${pathStr}>`, `${intlMsg.commands_codegen_options_s()}` @@ -88,7 +76,6 @@ export const codegen: Command = { options.manifestFile, defaultProjectManifestFiles ), - publishDir: parseDirOption(options.publishDir, defaultPublishDir), logFile: parseLogFileOption(options.logFile), }); }); @@ -101,7 +88,6 @@ async function run(options: CodegenCommandOptions) { codegenDir, script, clientConfig, - publishDir, verbose, quiet, logFile, @@ -117,8 +103,6 @@ async function run(options: CodegenCommandOptions) { return; } - const projectType = await project.getManifestLanguage(); - const schemaComposer = new SchemaComposer({ project, client, @@ -141,24 +125,6 @@ async function run(options: CodegenCommandOptions) { const result = await codeGenerator.generate(); - // HACK: Codegen outputs wrap.info into a build directory for plugins, needs to be moved into a build command? - if (isPluginManifestLanguage(projectType)) { - // Output the built manifest - const manifestPath = path.join(publishDir, "wrap.info"); - - if (!fs.existsSync(publishDir)) { - fs.mkdirSync(publishDir); - } - - await generateWrapFile( - await schemaComposer.getComposedAbis(), - await project.getName(), - "plugin", - manifestPath, - logger - ); - } - if (result) { logger.info(`🔥 ${intlMsg.commands_codegen_success()} 🔥`); process.exit(0); From d5a2f859b49cf8ba4cfa9eab7941c21569787a97 Mon Sep 17 00:00:00 2001 From: Pileks Date: Wed, 26 Oct 2022 23:00:55 +0200 Subject: [PATCH 03/29] CLI - build wasm & plugin support refactor WIP --- packages/cli/src/commands/build.ts | 143 +++++++++++++++-------------- 1 file changed, 75 insertions(+), 68 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index a2a6b71291..adad29ad8b 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -161,12 +161,14 @@ async function run(options: BuildCommandOptions) { const manifest = await project.getManifest(); const language = manifest.project.type; - + const schemaComposer = new SchemaComposer({ project, client, }); + let execute: () => Promise; + if (isPolywrapManifestLanguage(language)) { await validateManifestModules(manifest as PolywrapManifest); @@ -176,7 +178,7 @@ async function run(options: BuildCommandOptions) { project as PolywrapProject ); - const execute = async (): Promise => { + execute = async (): Promise => { const compiler = new Compiler({ project: project as PolywrapProject, outputDir, @@ -192,82 +194,87 @@ async function run(options: BuildCommandOptions) { return true; }; + } else if (isPluginManifestLanguage(language)) { + execute = async (): Promise => { + // Output the built manifest + const manifestPath = path.join(outputDir, "wrap.info"); - if (!watch) { - const result = await execute(); - - if (!result) { - process.exit(1); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir); } - } else { - // Execute - await execute(); - - const keyPressListener = () => { - // Watch for escape key presses - logger.info( - `${intlMsg.commands_build_keypressListener_watching()}: ${project.getManifestDir()}` - ); - logger.info(intlMsg.commands_build_keypressListener_exit()); - readline.emitKeypressEvents(process.stdin); - process.stdin.on("keypress", async (str, key) => { - if ( - key.name == "escape" || - key.name == "q" || - (key.name == "c" && key.ctrl) - ) { - await watcher.stop(); - process.kill(process.pid, "SIGINT"); - } - }); - if (process.stdin.setRawMode) { - process.stdin.setRawMode(true); - } + await generateWrapFile( + await schemaComposer.getComposedAbis(), + await project.getName(), + "plugin", + manifestPath, + logger + ); - process.stdin.resume(); - }; + return true; + }; + } else { + console.log("Unsupported project type!"); + return; + } - keyPressListener(); + if (!watch) { + const result = await execute(); - // Watch the directory - const watcher = new Watcher(); + if (!result) { + process.exit(1); + } - watcher.start(project.getManifestDir(), { - ignored: [outputDir + "/**", project.getManifestDir() + "/**/wrap/**"], - ignoreInitial: true, - execute: async (events: WatchEvent[]) => { - // Log all of the events encountered - for (const event of events) { - logger.info(`${watchEventName(event.type)}: ${event.path}`); - } + process.exit(0); + } else { + // Execute + await execute(); + + const keyPressListener = () => { + // Watch for escape key presses + logger.info( + `${intlMsg.commands_build_keypressListener_watching()}: ${project.getManifestDir()}` + ); + logger.info(intlMsg.commands_build_keypressListener_exit()); + readline.emitKeypressEvents(process.stdin); + process.stdin.on("keypress", async (str, key) => { + if ( + key.name == "escape" || + key.name == "q" || + (key.name == "c" && key.ctrl) + ) { + await watcher.stop(); + process.kill(process.pid, "SIGINT"); + } + }); - // Execute the build - await execute(); + if (process.stdin.setRawMode) { + process.stdin.setRawMode(true); + } - // Process key presses - keyPressListener(); - }, - }); - } - } else if (isPluginManifestLanguage(language)){ - // Output the built manifest - const manifestPath = path.join(outputDir, "wrap.info"); + process.stdin.resume(); + }; - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir); - } + keyPressListener(); - await generateWrapFile( - await schemaComposer.getComposedAbis(), - await project.getName(), - "plugin", - manifestPath, - logger - ); - } else { - console.log("Unsupported project type!"); - } + // Watch the directory + const watcher = new Watcher(); - process.exit(0); + watcher.start(project.getManifestDir(), { + ignored: [outputDir + "/**", project.getManifestDir() + "/**/wrap/**"], + ignoreInitial: true, + execute: async (events: WatchEvent[]) => { + // Log all of the events encountered + for (const event of events) { + logger.info(`${watchEventName(event.type)}: ${event.path}`); + } + + // Execute the build + await execute(); + + // Process key presses + keyPressListener(); + }, + }); + } } From 0835434cfaa5ced949710522729c1c0d9e7e2096 Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 27 Oct 2022 23:07:57 +0200 Subject: [PATCH 04/29] CLI build command - add hard-stop for unsupported project types --- packages/cli/lang/en.json | 1 + packages/cli/lang/es.json | 1 + packages/cli/src/commands/build.ts | 55 +++++++++++++++++++++--------- 3 files changed, 40 insertions(+), 17 deletions(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index da8cdfd9ec..c2d1d68579 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -7,6 +7,7 @@ "commands_build_error_manifestPathMissing": "{option} option missing {argument} argument", "commands_build_error_manifestNotFound": "Manifest not found. Search paths used: {paths}", "commands_build_error_outputDirMissingPath": "{option} option missing {argument} argument", + "commands_build_error_unsupportedProjectType": "Unsupported project type. You can only build the following project types: {supportedTypes}", "commands_build_keypressListener_exit": "Exit: [CTRL + C], [ESC], or [Q]", "commands_build_keypressListener_watching": "Watching", "commands_build_options_h": "Show usage information", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index da8cdfd9ec..c2d1d68579 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -7,6 +7,7 @@ "commands_build_error_manifestPathMissing": "{option} option missing {argument} argument", "commands_build_error_manifestNotFound": "Manifest not found. Search paths used: {paths}", "commands_build_error_outputDirMissingPath": "{option} option missing {argument} argument", + "commands_build_error_unsupportedProjectType": "Unsupported project type. You can only build the following project types: {supportedTypes}", "commands_build_keypressListener_exit": "Exit: [CTRL + C], [ESC], or [Q]", "commands_build_keypressListener_watching": "Watching", "commands_build_options_h": "Show usage information", diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index adad29ad8b..12f92e4cf1 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -17,6 +17,8 @@ import { isPolywrapManifestLanguage, isPluginManifestLanguage, generateWrapFile, + polywrapManifestLanguages, + pluginManifestLanguages, } from "../lib"; import { DockerVMBuildStrategy, @@ -39,6 +41,11 @@ const strategyStr = intlMsg.commands_build_options_s_strategy(); const defaultManifestStr = defaultPolywrapManifest.join(" | "); const pathStr = intlMsg.commands_build_options_o_path(); +const supportedProjectTypes = [ + ...Object.values(polywrapManifestLanguages), + ...Object.values(pluginManifestLanguages), +]; + type BuildCommandOptions = { manifestFile: string; outputDir: string; @@ -162,12 +169,7 @@ async function run(options: BuildCommandOptions) { const manifest = await project.getManifest(); const language = manifest.project.type; - const schemaComposer = new SchemaComposer({ - project, - client, - }); - - let execute: () => Promise; + let execute: () => Promise; if (isPolywrapManifestLanguage(language)) { await validateManifestModules(manifest as PolywrapManifest); @@ -179,6 +181,11 @@ async function run(options: BuildCommandOptions) { ); execute = async (): Promise => { + const schemaComposer = new SchemaComposer({ + project, + client, + }); + const compiler = new Compiler({ project: project as PolywrapProject, outputDir, @@ -196,25 +203,39 @@ async function run(options: BuildCommandOptions) { }; } else if (isPluginManifestLanguage(language)) { execute = async (): Promise => { + const schemaComposer = new SchemaComposer({ + project, + client, + }); + // Output the built manifest const manifestPath = path.join(outputDir, "wrap.info"); - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir); - } + try { + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir); + } - await generateWrapFile( - await schemaComposer.getComposedAbis(), - await project.getName(), - "plugin", - manifestPath, - logger - ); + await generateWrapFile( + await schemaComposer.getComposedAbis(), + await project.getName(), + "plugin", + manifestPath, + logger + ); + } catch (err) { + logger.error(err.message); + return false; + } return true; }; } else { - console.log("Unsupported project type!"); + logger.error( + intlMsg.commands_build_error_unsupportedProjectType({ + supportedTypes: supportedProjectTypes.join(", "), + }) + ); return; } From f19ccee82b0e02ecfcb4d501299c5a31aeee4657 Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 27 Oct 2022 23:44:41 +0200 Subject: [PATCH 05/29] CLI build command - reintroduce optional codegen step --- packages/cli/lang/en.json | 2 +- packages/cli/lang/es.json | 2 +- packages/cli/src/commands/build.ts | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index c2d1d68579..6f1fd9f961 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -16,7 +16,7 @@ "commands_build_options_o_path": "path", "commands_build_options_options": "options", "commands_build_options_t": "Use the development server's ENS instance", - "commands_build_options_n": "Skip code generation", + "commands_build_options_codegen": "Perform code generation before build", "commands_build_options_w": "Automatically rebuild when changes are made (default: false)", "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index c2d1d68579..6f1fd9f961 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -16,7 +16,7 @@ "commands_build_options_o_path": "path", "commands_build_options_options": "options", "commands_build_options_t": "Use the development server's ENS instance", - "commands_build_options_n": "Skip code generation", + "commands_build_options_codegen": "Perform code generation before build", "commands_build_options_w": "Automatically rebuild when changes are made (default: false)", "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 12f92e4cf1..bfd6d67deb 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -20,6 +20,7 @@ import { polywrapManifestLanguages, pluginManifestLanguages, } from "../lib"; +import { CodeGenerator } from "../lib/codegen"; import { DockerVMBuildStrategy, BuildStrategy, @@ -50,6 +51,7 @@ type BuildCommandOptions = { manifestFile: string; outputDir: string; clientConfig: Partial; + codegen: boolean; watch?: boolean; strategy: SupportedStrategies; verbose?: boolean; @@ -79,6 +81,7 @@ export const build: Command = { `-c, --client-config <${intlMsg.commands_common_options_configPath()}>`, `${intlMsg.commands_common_options_config()}` ) + .option(`--codegen`, `${intlMsg.commands_build_options_codegen()}`) .option( `-s, --strategy <${strategyStr}>`, `${intlMsg.commands_build_options_s()}`, @@ -149,6 +152,7 @@ async function run(options: BuildCommandOptions) { outputDir, clientConfig, strategy, + codegen, verbose, quiet, logFile, @@ -186,6 +190,11 @@ async function run(options: BuildCommandOptions) { client, }); + if (codegen) { + const codeGenerator = new CodeGenerator({ project, schemaComposer }); + await codeGenerator?.generate(); + } + const compiler = new Compiler({ project: project as PolywrapProject, outputDir, @@ -212,6 +221,11 @@ async function run(options: BuildCommandOptions) { const manifestPath = path.join(outputDir, "wrap.info"); try { + if (codegen) { + const codeGenerator = new CodeGenerator({ project, schemaComposer }); + await codeGenerator?.generate(); + } + if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir); } From b636432f6455674b1b4d1e0177002799bbcadc4f Mon Sep 17 00:00:00 2001 From: Pileks Date: Wed, 2 Nov 2022 21:00:13 +0100 Subject: [PATCH 06/29] CLI - separate plugin codegen actions into codegen and build commands --- .../src/__tests__/e2e/build.plugin.spec.ts | 47 +++++++++++++++++ .../e2e/{build.spec.ts => build.wasm.spec.ts} | 27 ++-------- .../src/__tests__/e2e/codegen.plugin.spec.ts | 7 +-- .../cli/src/__tests__/e2e/codegen.spec.ts | 2 - .../__tests__/e2e/helpers/testBuildOutput.ts | 22 ++++++++ .../e2e/helpers/testCodegenOutput.ts | 13 ----- .../wasm/assemblyscript/local/local.sh | 2 +- .../plugin/build-cmd/001-sanity/.gitignore | 1 + .../expected/build-artifacts/wrap.info | Bin .../build-cmd/001-sanity/expected/stdout.json | 4 ++ .../plugin/build-cmd/001-sanity/polywrap.yaml | 7 +++ .../build-cmd/001-sanity/schema.graphql | 22 ++++++++ .../plugin/build-cmd/001-sanity/src/index.ts | 1 + .../build-cmd/002-single-module/.gitignore | 1 + .../expected/build-artifacts/wrap.info | Bin .../002-single-module/expected/stdout.json | 4 ++ .../build-cmd/002-single-module/polywrap.yaml | 7 +++ .../002-single-module/schema.graphql | 18 +++++++ .../build-cmd/002-single-module/src/index.ts | 1 + .../cli/plugin/build-cmd/003-env/.gitignore | 1 + .../expected/build-artifacts/wrap.info | Bin .../build-cmd/003-env/expected/stdout.json | 4 ++ .../plugin/build-cmd/003-env/polywrap.yaml | 7 +++ .../plugin/build-cmd/003-env/schema.graphql | 9 ++++ .../cli/plugin/build-cmd/003-env/src/index.ts | 1 + .../build-cmd/004-env-sanitization/.gitignore | 1 + .../expected/build-artifacts/wrap.info | Bin .../004-env-sanitization/expected/stdout.json | 4 ++ .../004-env-sanitization/polywrap.yaml | 7 +++ .../004-env-sanitization/schema.graphql | 9 ++++ .../004-env-sanitization/src/index.ts | 1 + .../build-cmd/005-custom-config/.gitignore | 1 + .../build-cmd/005-custom-config/cmd.json | 3 ++ .../build-cmd/005-custom-config/config.ts | 49 ++++++++++++++++++ .../expected/build-artifacts/wrap.info | Bin .../005-custom-config/expected/stdout.json | 4 ++ .../build-cmd/005-custom-config/polywrap.yaml | 7 +++ .../005-custom-config/schema.graphql | 22 ++++++++ .../build-cmd/005-custom-config/src/index.ts | 1 + .../006-custom-manifest-file/.gitignore | 1 + .../006-custom-manifest-file/cmd.json | 3 ++ .../expected/build-artifacts/wrap.info | Bin .../expected/stdout.json | 4 ++ .../polywrap.custom.plugin.yaml | 7 +++ .../006-custom-manifest-file/schema.graphql | 22 ++++++++ .../006-custom-manifest-file/src/index.ts | 1 + .../codegen/001-sanity/expected/stdout.json | 2 +- .../002-single-module/expected/stdout.json | 2 +- .../codegen/003-env/expected/stdout.json | 2 +- .../004-env-sanitization/expected/stdout.json | 2 +- .../005-custom-config/expected/stdout.json | 2 +- .../expected/stdout.json | 2 +- .../assemblyscript/012-no-codegen/cmd.json | 3 -- .../012-no-codegen/expected/stdout.json | 7 --- .../012-no-codegen/package.json | 15 ------ .../012-no-codegen/polywrap.build.yaml | 10 ---- .../012-no-codegen/polywrap.yaml | 9 ---- .../012-no-codegen/src/index.ts | 5 -- .../012-no-codegen/src/schema.graphql | 5 -- 59 files changed, 316 insertions(+), 105 deletions(-) create mode 100644 packages/cli/src/__tests__/e2e/build.plugin.spec.ts rename packages/cli/src/__tests__/e2e/{build.spec.ts => build.wasm.spec.ts} (91%) create mode 100644 packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/.gitignore rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/001-sanity/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/src/index.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/.gitignore rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/002-single-module/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/src/index.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/003-env/.gitignore rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/003-env/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/003-env/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/003-env/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/003-env/src/index.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/.gitignore rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/004-env-sanitization/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/src/index.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/.gitignore create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/cmd.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/005-custom-config/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/src/index.ts create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/.gitignore create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/cmd.json rename packages/test-cases/cases/cli/plugin/{codegen => build-cmd}/006-custom-manifest-file/expected/build-artifacts/wrap.info (100%) create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/polywrap.custom.plugin.yaml create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/schema.graphql create mode 100644 packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/src/index.ts delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/cmd.json delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/expected/stdout.json delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/package.json delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.build.yaml delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.yaml delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/index.ts delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/schema.graphql diff --git a/packages/cli/src/__tests__/e2e/build.plugin.spec.ts b/packages/cli/src/__tests__/e2e/build.plugin.spec.ts new file mode 100644 index 0000000000..1b02e13e2b --- /dev/null +++ b/packages/cli/src/__tests__/e2e/build.plugin.spec.ts @@ -0,0 +1,47 @@ +import { runCLI } from "@polywrap/test-env-js"; +import { GetPathToCliTestFiles } from "@polywrap/test-cases"; +import path from "path"; +import fs from "fs"; +import { testCliOutput } from "./helpers/testCliOutput"; +import { testBuildOutput } from "./helpers/testBuildOutput"; + +describe("e2e tests for build command - plugin project", () => { + const testCaseRoot = path.join(GetPathToCliTestFiles(), "plugin/build-cmd"); + const testCases = fs + .readdirSync(testCaseRoot, { withFileTypes: true }) + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => dirent.name); + const getTestCaseDir = (index: number) => + path.join(testCaseRoot, testCases[index]); + + describe("test-cases", () => { + for (let i = 0; i < testCases.length; ++i) { + const testCaseName = testCases[i]; + const testCaseDir = getTestCaseDir(i); + + let buildDir = path.join(testCaseDir, "build"); + let cmdArgs: string[] = []; + let cmdFile = path.join(testCaseDir, "cmd.json"); + if (fs.existsSync(cmdFile)) { + const cmdConfig = JSON.parse(fs.readFileSync(cmdFile, "utf-8")); + if (cmdConfig.args) { + cmdArgs.push(...cmdConfig.args); + } + + if (cmdConfig.buildDir) { + buildDir = path.join(testCaseDir, cmdConfig.buildDir); + } + } + + test(testCaseName, async () => { + const { exitCode: code, stdout: output, stderr: error } = await runCLI({ + args: ["build", ...cmdArgs], + cwd: testCaseDir, + }); + + testCliOutput(testCaseDir, code, output, error); + testBuildOutput(testCaseDir, buildDir); + }); + } + }); +}); diff --git a/packages/cli/src/__tests__/e2e/build.spec.ts b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts similarity index 91% rename from packages/cli/src/__tests__/e2e/build.spec.ts rename to packages/cli/src/__tests__/e2e/build.wasm.spec.ts index 24275ff75e..e2269e5679 100644 --- a/packages/cli/src/__tests__/e2e/build.spec.ts +++ b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts @@ -5,6 +5,7 @@ import { GetPathToCliTestFiles } from "@polywrap/test-cases"; import fs from "fs"; import os from "os"; import path from "path"; +import { testBuildOutput } from "./helpers/testBuildOutput"; const HELP = `Usage: polywrap build|b [options] @@ -17,7 +18,7 @@ Options: (default: ./build) -c, --client-config Add custom configuration to the PolywrapClient - -n, --no-codegen Skip code generation + --codegen Perform code generation before build -s, --strategy Strategy to use for building the wrapper (default: "vm") -w, --watch Automatically rebuild when changes are @@ -87,26 +88,6 @@ describe("e2e tests for build command", () => { } }; - const testBuildOutput = (testCaseDir: string, buildDir: string) => { - const expectedOutputFile = path.join( - testCaseDir, - "expected", - "output.json" - ); - if (fs.existsSync(expectedOutputFile)) { - const expectedFiles = JSON.parse( - fs.readFileSync(expectedOutputFile, { encoding: "utf8" }) - ); - - for (const file of expectedFiles) { - if (!fs.existsSync(path.join(buildDir, file))) { - expect(path.join(buildDir, file)).toBe("debug") - } - expect(fs.existsSync(path.join(buildDir, file))).toBeTruthy(); - } - } - }; - it("Should show help text", async () => { const { exitCode: code, stdout: output, stderr: error } = await runCLI({ args: ["build", "--help"], @@ -231,7 +212,7 @@ describe("e2e tests for build command", () => { describe("Local strategy", () => { it("Builds for assemblyscript", async () => { const { exitCode: code, stdout: output } = await runCLI({ - args: ["build", "-v", "-s", "local"], + args: ["build", "-v", "-s", "local", "--codegen"], cwd: getTestCaseDir(0), cli: polywrapCli, }); @@ -243,7 +224,7 @@ describe("e2e tests for build command", () => { expect(output).toContain(`WRAP manifest written in ${buildDir}/wrap.info`); }); }) - + describe("test-cases", () => { for (let i = 0; i < testCases.length; i++) { const testCaseName = testCases[i]; diff --git a/packages/cli/src/__tests__/e2e/codegen.plugin.spec.ts b/packages/cli/src/__tests__/e2e/codegen.plugin.spec.ts index e9db04942a..e40d917dbb 100644 --- a/packages/cli/src/__tests__/e2e/codegen.plugin.spec.ts +++ b/packages/cli/src/__tests__/e2e/codegen.plugin.spec.ts @@ -20,7 +20,6 @@ describe("e2e tests for codegen command - plugin project", () => { const testCaseDir = getTestCaseDir(i); let codegenDir = path.join(testCaseDir, "src", "wrap"); - let buildDir = path.join(testCaseDir, "build"); let cmdArgs: string[] = []; let cmdFile = path.join(testCaseDir, "cmd.json"); if (fs.existsSync(cmdFile)) { @@ -32,10 +31,6 @@ describe("e2e tests for codegen command - plugin project", () => { if (cmdConfig.codegenDir) { codegenDir = path.join(testCaseDir, cmdConfig.codegenDir); } - - if (cmdConfig.buildDir) { - buildDir = path.join(testCaseDir, cmdConfig.buildDir); - } } test(testCaseName, async () => { @@ -44,7 +39,7 @@ describe("e2e tests for codegen command - plugin project", () => { cwd: testCaseDir, }); testCliOutput(testCaseDir, code, output, error); - testCodegenOutput(testCaseDir, codegenDir, buildDir); + testCodegenOutput(testCaseDir, codegenDir); }); } }); diff --git a/packages/cli/src/__tests__/e2e/codegen.spec.ts b/packages/cli/src/__tests__/e2e/codegen.spec.ts index 907ef8adb6..5f25494c86 100644 --- a/packages/cli/src/__tests__/e2e/codegen.spec.ts +++ b/packages/cli/src/__tests__/e2e/codegen.spec.ts @@ -16,8 +16,6 @@ Options: (default: polywrap.yaml | polywrap.yml) -g, --codegen-dir Output directory for the generated code (default: ./src/wrap) - -p, --publish-dir Output path for the built schema and - manifest (default: ./build) -s, --script Path to a custom generation script (JavaScript | TypeScript) -c, --client-config Add custom configuration to the diff --git a/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts b/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts new file mode 100644 index 0000000000..190b1fcc94 --- /dev/null +++ b/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts @@ -0,0 +1,22 @@ +import path from "path"; +import fs from "fs"; + +export const testBuildOutput = (testCaseDir: string, buildDir: string) => { + const expectedOutputFile = path.join( + testCaseDir, + "expected", + "output.json" + ); + if (fs.existsSync(expectedOutputFile)) { + const expectedFiles = JSON.parse( + fs.readFileSync(expectedOutputFile, { encoding: "utf8" }) + ); + + for (const file of expectedFiles) { + if (!fs.existsSync(path.join(buildDir, file))) { + expect(path.join(buildDir, file)).toBe("debug") + } + expect(fs.existsSync(path.join(buildDir, file))).toBeTruthy(); + } + } +}; \ No newline at end of file diff --git a/packages/cli/src/__tests__/e2e/helpers/testCodegenOutput.ts b/packages/cli/src/__tests__/e2e/helpers/testCodegenOutput.ts index 4b2caed433..7700289e23 100644 --- a/packages/cli/src/__tests__/e2e/helpers/testCodegenOutput.ts +++ b/packages/cli/src/__tests__/e2e/helpers/testCodegenOutput.ts @@ -5,7 +5,6 @@ import { compareSync } from "dir-compare"; export const testCodegenOutput = ( testCaseDir: string, codegenDir: string, - buildDir?: string ) => { if (fs.existsSync(path.join(testCaseDir, "expected", "wrap"))) { const expectedCodegenResult = compareSync( @@ -15,16 +14,4 @@ export const testCodegenOutput = ( ); expect(expectedCodegenResult.differences).toBe(0); } - - // HACK for testing plugin codegen output, as it outputs ABI to a build folder - if (buildDir) { - if (fs.existsSync(path.join(testCaseDir, "expected", "build-artifacts"))) { - const expectedBuildResult = compareSync( - buildDir, - path.join(testCaseDir, "expected", "build-artifacts"), - { compareContent: true } - ); - expect(expectedBuildResult.differences).toBe(0); - } - } }; diff --git a/packages/cli/src/lib/defaults/build-strategies/wasm/assemblyscript/local/local.sh b/packages/cli/src/lib/defaults/build-strategies/wasm/assemblyscript/local/local.sh index 3f5c7551b4..9a7b5f17c7 100644 --- a/packages/cli/src/lib/defaults/build-strategies/wasm/assemblyscript/local/local.sh +++ b/packages/cli/src/lib/defaults/build-strategies/wasm/assemblyscript/local/local.sh @@ -1,6 +1,6 @@ #!/bin/sh yarn -asc "$1"/wrap/entry.ts \ +npx asc "$1"/wrap/entry.ts \ --path ./node_modules \ --outFile "$2"/wrap.wasm \ --use abort="$1"/wrap/entry/wrapAbort \ diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/polywrap.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/polywrap.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/schema.graphql new file mode 100644 index 0000000000..acad0ae76c --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/schema.graphql @@ -0,0 +1,22 @@ +#import { Module } into Ethereum from "ens/ethereum.polywrap.eth" + +type Module { + methodOne( + str: String! + optStr: String + ): Object! + + methodTwo( + arg: UInt32! + ): String! +} + +type Object { + u: UInt! + array: [Boolean!]! + bytes: Bytes +} + +type Env { + arg1: String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/001-sanity/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/polywrap.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/polywrap.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/schema.graphql new file mode 100644 index 0000000000..e6a76ae4db --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/schema.graphql @@ -0,0 +1,18 @@ +#import { Module } into Ethereum from "ens/ethereum.polywrap.eth" + +type Module { + method( + str: String! + optStr: String + ): Object! +} + +type Object { + u: UInt! + array: [Boolean!]! + bytes: Bytes +} + +type Env { + arg1: String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/002-single-module/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/003-env/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/003-env/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/003-env/polywrap.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/polywrap.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/003-env/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/schema.graphql new file mode 100644 index 0000000000..62f5b70802 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/schema.graphql @@ -0,0 +1,9 @@ +type Env { + arg1: String! +} + +type Module { + method( + str: String! + ): String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/003-env/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/003-env/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/polywrap.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/polywrap.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/schema.graphql new file mode 100644 index 0000000000..50786e40e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/schema.graphql @@ -0,0 +1,9 @@ +type Env { + queryArg: String! +} + +type Module { + method( + str: String! + ): String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/004-env-sanitization/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/cmd.json b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/cmd.json new file mode 100644 index 0000000000..aa6170b001 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/cmd.json @@ -0,0 +1,3 @@ +{ + "args": ["-c", "./config.ts"] +} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts new file mode 100644 index 0000000000..0513b0a80e --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts @@ -0,0 +1,49 @@ +import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; +import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; +import { parseSchema } from "@polywrap/schema-parse"; + +interface Config extends Record { + val: number; +} + +class MockPlugin extends PluginModule { + getData(_: unknown): number { + return this.config.val; + } + + setData(args: { value: number }) { + this.config.val = +args.value; + return true; + } + + deployContract(): string { + return "0x100"; + } +} + +const mockPlugin = () => { + return PluginPackage.from(new MockPlugin({ val: 0 }), { + name: "mock", + type: "plugin", + version: latestWrapManifestVersion, + abi: parseSchema(` + type Module { + getData: Int! + setData(value: Int!): Boolean! + deployContract: String! + } + `) + }); +}; + +export function getCustomConfig(): Partial> { + return { + packages: [ + { + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }, + ], + }; +} diff --git a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/polywrap.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/polywrap.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/schema.graphql new file mode 100644 index 0000000000..acad0ae76c --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/schema.graphql @@ -0,0 +1,22 @@ +#import { Module } into Ethereum from "ens/ethereum.polywrap.eth" + +type Module { + methodOne( + str: String! + optStr: String + ): Object! + + methodTwo( + arg: UInt32! + ): String! +} + +type Object { + u: UInt! + array: [Boolean!]! + bytes: Bytes +} + +type Env { + arg1: String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/.gitignore b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/.gitignore new file mode 100644 index 0000000000..3386731da9 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/.gitignore @@ -0,0 +1 @@ +!expected/** diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/cmd.json b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/cmd.json new file mode 100644 index 0000000000..d8aa2a5393 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/cmd.json @@ -0,0 +1,3 @@ +{ + "args": ["-m", "./polywrap.custom.plugin.yaml"] +} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/build-artifacts/wrap.info b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/build-artifacts/wrap.info similarity index 100% rename from packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/build-artifacts/wrap.info rename to packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/build-artifacts/wrap.info diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/stdout.json b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/stdout.json new file mode 100644 index 0000000000..7a9405a890 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/expected/stdout.json @@ -0,0 +1,4 @@ +{ + "stdout": ["Manifest written to ./build/wrap.info"], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/polywrap.custom.plugin.yaml b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/polywrap.custom.plugin.yaml new file mode 100644 index 0000000000..fefc4fe360 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/polywrap.custom.plugin.yaml @@ -0,0 +1,7 @@ +format: 0.2.0 +project: + name: Test + type: plugin/typescript +source: + schema: ./schema.graphql + module: ./src/index.ts diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/schema.graphql b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/schema.graphql new file mode 100644 index 0000000000..acad0ae76c --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/schema.graphql @@ -0,0 +1,22 @@ +#import { Module } into Ethereum from "ens/ethereum.polywrap.eth" + +type Module { + methodOne( + str: String! + optStr: String + ): Object! + + methodTwo( + arg: UInt32! + ): String! +} + +type Object { + u: UInt! + array: [Boolean!]! + bytes: Bytes +} + +type Env { + arg1: String! +} diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/src/index.ts b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/src/index.ts new file mode 100644 index 0000000000..5bb85ff3e4 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/006-custom-manifest-file/src/index.ts @@ -0,0 +1 @@ +export * from "./wrap"; diff --git a/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/stdout.json index effa84caf8..52d4333344 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.custom.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/cmd.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/cmd.json deleted file mode 100644 index 0fa14b3655..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/cmd.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "args": ["--no-codegen"] -} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/expected/stdout.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/expected/stdout.json deleted file mode 100644 index 5bdbe4e6b9..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/expected/stdout.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "stderr": [ - "Failed to compile Polywrap", - "File 'src/wrap/entry.ts' not found" - ], - "exitCode": 1 -} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/package.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/package.json deleted file mode 100644 index 3360b30d0f..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@polywrap/test-project", - "version": "0.1.0", - "license": "MIT", - "private": true, - "scripts": { - "build": "polywrap build" - }, - "dependencies": { - "@polywrap/wasm-as": "0.3.0" - }, - "devDependencies": { - "assemblyscript": "0.19.23" - } -} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.build.yaml b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.build.yaml deleted file mode 100644 index baf96101d3..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.build.yaml +++ /dev/null @@ -1,10 +0,0 @@ -format: 0.2.0 -strategies: - image: - node_version: "14.16.0" - include: - - ./src - - ./package.json -linked_packages: - - name: "@polywrap/wasm-as" - path: ../../../../../../../wasm/as diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.yaml b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.yaml deleted file mode 100644 index bc49fac9ee..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -format: 0.2.0 -project: - name: test-project - type: wasm/assemblyscript -source: - module: ./src/index.ts - schema: ./src/schema.graphql -extensions: - build: ./polywrap.build.yaml \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/index.ts deleted file mode 100644 index 862d4cb226..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Args_method } from "./wrap"; - -export function method(args: Args_method): string { - return args.arg; -} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/schema.graphql b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/schema.graphql deleted file mode 100644 index 325e224971..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/src/schema.graphql +++ /dev/null @@ -1,5 +0,0 @@ -type Module { - method( - arg: String! - ): String! -} From 86d4ab0ad3955b3be115fd25e4cb99e324695e57 Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 15:41:07 +0100 Subject: [PATCH 07/29] merge with origin-0.10-dev --- .github/CODEOWNERS | 2 +- packages/cli/README.md | 549 +++++++++++++++++- packages/cli/lang/en.json | 2 +- packages/cli/lang/es.json | 2 +- packages/cli/package.json | 1 + .../cli/src/__tests__/unit/jobrunner.spec.ts | 9 +- packages/cli/src/commands/build.ts | 14 +- packages/cli/src/commands/codegen.ts | 12 +- packages/cli/src/commands/docgen.ts | 12 +- packages/cli/src/commands/manifest.ts | 4 +- packages/cli/src/commands/test.ts | 10 +- .../cli/src/commands/utils/createLogger.ts | 4 +- packages/cli/src/lib/logging/Log.ts | 7 +- packages/cli/src/lib/logging/Logger.ts | 6 +- .../cli/src/lib/logging/logs/ConsoleLog.ts | 3 +- packages/cli/src/lib/logging/logs/FileLog.ts | 3 +- .../manifest/migrate/migrateAnyManifest.ts | 8 +- .../migrate/migrateAppProjectManifest.ts | 7 +- .../migrate/migrateBuildExtensionManifest.ts | 7 +- .../migrate/migrateDeployExtensionManifest.ts | 7 +- .../migrate/migrateInfraExtensionManifest.ts | 7 +- .../migrate/migrateMetaExtensionManifest.ts | 7 +- .../migrate/migratePluginProjectManifest.ts | 7 +- .../migrate/migratePolywrapProjectManifest.ts | 7 +- .../migrate/migrateTestExtensionManifest.ts | 10 +- .../src/lib/option-parsers/client-config.ts | 24 +- .../cli/src/lib/project/manifests/app/load.ts | 2 +- .../src/lib/project/manifests/plugin/load.ts | 2 +- .../lib/project/manifests/polywrap/load.ts | 11 +- packages/cli/src/lib/workflow/JobRunner.ts | 21 +- packages/cli/src/lib/workflow/types.ts | 4 +- .../src/BaseClientConfigBuilder.ts | 348 +++++++++++ .../src/ClientConfigBuilder.ts | 369 +----------- .../src/IClientConfigBuilder.ts | 45 ++ .../__tests__/client-config-builder.spec.ts | 2 +- .../js/client-config-builder/src/index.ts | 4 +- packages/js/client/src/PolywrapClient.ts | 4 +- .../__tests__/core/interface-impls.spec.ts | 2 +- .../js/client/src/__tests__/e2e/test-cases.ts | 4 +- packages/js/logging/README.md | 8 + packages/js/logging/package.json | 28 + packages/js/logging/src/ILogger.ts | 9 + packages/js/logging/src/LogLevel.ts | 6 + packages/js/logging/src/index.ts | 2 + packages/js/logging/tsconfig.build.json | 9 + packages/js/logging/tsconfig.json | 13 + packages/js/manifests/polywrap/package.json | 1 + .../scripts/templates/deserialize-ts.mustache | 5 +- .../scripts/templates/migrate-ts.mustache | 6 +- .../js/manifests/polywrap/src/deserialize.ts | 2 + .../src/formats/polywrap.app/deserialize.ts | 5 +- .../src/formats/polywrap.app/migrate.ts | 6 +- .../polywrap.app/migrators/0.1.0_to_0.2.0.ts | 15 +- .../src/formats/polywrap.build/deserialize.ts | 5 +- .../src/formats/polywrap.build/migrate.ts | 6 +- .../formats/polywrap.deploy/deserialize.ts | 5 +- .../src/formats/polywrap.deploy/migrate.ts | 6 +- .../src/formats/polywrap.infra/deserialize.ts | 5 +- .../src/formats/polywrap.infra/migrate.ts | 6 +- .../src/formats/polywrap.meta/deserialize.ts | 5 +- .../src/formats/polywrap.meta/migrate.ts | 6 +- .../formats/polywrap.plugin/deserialize.ts | 5 +- .../src/formats/polywrap.plugin/migrate.ts | 6 +- .../migrators/0.1.0_to_0.2.0.ts | 15 +- .../src/formats/polywrap.test/deserialize.ts | 5 +- .../src/formats/polywrap.test/migrate.ts | 6 +- .../src/formats/polywrap/deserialize.ts | 5 +- .../polywrap/src/formats/polywrap/migrate.ts | 6 +- .../polywrap/migrators/0.1.0_to_0.2.0.ts | 15 +- .../migrations/{migration.ts => Migrator.ts} | 3 +- .../migrations/findShortestMigrationPath.ts | 2 +- .../polywrap/src/migrations/index.ts | 2 +- packages/js/plugins/ethereum/README.md | 97 ++-- .../ethereum/src/__tests__/e2e.spec.ts | 16 + .../src/__tests__/integration/src/index.ts | 10 + .../__tests__/integration/src/schema.graphql | 5 + packages/js/plugins/ethereum/src/index.ts | 9 + .../js/plugins/ethereum/src/schema.graphql | 5 + packages/templates/wasm/interface/README.md | 4 +- .../wasm/interface/polywrap.deploy.yaml | 2 + .../app/codegen/004-custom-config/config.ts | 19 +- .../cli/docgen/002-custom-config/config.ts | 16 +- .../codegen/005-custom-config/config.ts | 16 +- .../cases/cli/run/008-custom-config/config.ts | 15 + .../cli/test/008-custom-config/config.ts | 26 +- .../010-custom-config/config.ts | 16 +- .../014-override-config/cmd.json | 3 + .../014-override-config/config.ts | 158 +++++ .../014-override-config/expected/output.json | 4 + .../014-override-config/expected/stdout.json | 7 + .../014-override-config/package.json | 15 + .../014-override-config/polywrap.build.yaml | 10 + .../014-override-config/polywrap.yaml | 9 + .../014-override-config/src/index.ts | 9 + .../014-override-config/src/schema.graphql | 9 + .../wasm/codegen/005-custom-config/config.ts | 16 +- .../wasm/codegen/007-override-config/cmd.json | 3 + .../codegen/007-override-config/config.ts | 158 +++++ .../007-override-config/expected/stdout.json | 6 + .../codegen/007-override-config/package.json | 15 + .../007-override-config/polywrap.build.yaml | 10 + .../codegen/007-override-config/polywrap.yaml | 9 + .../007-override-config/schema.graphql | 9 + .../codegen/007-override-config/src/index.ts | 9 + .../simple-subinvoke/invoke/schema.graphql | 2 +- .../simple-subinvoke/invoke/src/index.ts | 6 +- yarn.lock | 184 +++--- 107 files changed, 1964 insertions(+), 721 deletions(-) create mode 100644 packages/js/client-config-builder/src/BaseClientConfigBuilder.ts create mode 100644 packages/js/client-config-builder/src/IClientConfigBuilder.ts create mode 100644 packages/js/logging/README.md create mode 100644 packages/js/logging/package.json create mode 100644 packages/js/logging/src/ILogger.ts create mode 100644 packages/js/logging/src/LogLevel.ts create mode 100644 packages/js/logging/src/index.ts create mode 100644 packages/js/logging/tsconfig.build.json create mode 100644 packages/js/logging/tsconfig.json rename packages/js/manifests/polywrap/src/migrations/{migration.ts => Migrator.ts} (79%) create mode 100644 packages/test-cases/cases/cli/run/008-custom-config/config.ts create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/output.json create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/package.json create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.build.yaml create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/schema.graphql create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/cmd.json create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/expected/stdout.json create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/package.json create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.build.yaml create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.yaml create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/schema.graphql create mode 100644 packages/test-cases/cases/cli/wasm/codegen/007-override-config/src/index.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1b57968971..fccc65cf71 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -35,7 +35,7 @@ packages/interfaces @dOrgJelli @krisbitney @cbrzn packages/js @dOrgJelli @nerfZael packages/js/asyncify @namesty @dOrgJelli packages/js/client @dOrgJelli @krisbitney @namesty @nerfZael -packages/js/client-config-builder @nerfZael +packages/js/client-config-builder @pileks @nerfZael packages/js/core @dOrgJelli @krisbitney @namesty @nerfZael packages/js/manifests @dOrgJelli @namesty @nerfZael @pileks @Niraj-Kamdar packages/js/msgpack @dOrgJelli @Niraj-Kamdar diff --git a/packages/cli/README.md b/packages/cli/README.md index 0744b320cd..f30a75bf2d 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -1,13 +1,546 @@ -# The Polywrap CLI (polywrap) +# The Polywrap CLI (`polywrap`) + + +npm + + +
+
A command-line interface for building and deploying Polywrap projects. -## Documentation -https://docs.polywrap.io/reference/cli/polywrap-cli -## Examples -Demos: -https://github.com/polywrap/demos +## Prerequisites + +### Docker + +[Docker](https://www.docker.com/) is required to perform some tasks, including to `build` Wasm wrappers. +Linux users will also need to install [Docker Compose](https://docs.docker.com/compose/install/). +Docker is free for personal use. Once Docker is installed and enabled, you're ready to go! + +### Cue + +The `polywrap run` command can validate runs by examining `stdout` output using **Cue**. If you need to run workflow validations, you will have to install Cue. + +You can install Cue by following the instructions found [here](https://cuelang.org/docs/install/). + +## Installation + +Within a single project: + +```bash +npm install --save-dev polywrap +``` + +Globally: + +```bash +npm install -g polywrap +``` + +Alternatively, `polywrap` can be run without installation: + +```bash +npx polywrap +``` + +## Commands + +### `help` command and `--help` option + +To list available commands, use the `help` command or the `-h, --help` option: + +```bash +polywrap help +polywrap --help +``` + +Alternatively, you can use the `-h, --help` option within any command to get a full list of available subcommands, arguments and options. + +```bash +polywrap create --help +polywrap codegen --help +``` + +### `build | b` + +Build Wasm and Interface Polywrap projects. +This outputs the project's ABI schema (Wasm and Interface) and binary package (Wasm) into the `./build` directory. + +#### Options +- `-m, --manifest-file ` + Specify your project's manifest file. + By default, `build` searches for `polywrap.yaml`. + +- `-o, --output-dir ` + Specify an alternative directory for build output. + The default codegen output directory is `./build`. + +- `-c, --client-config ` + Use a custom Polywrap Client configuration. + +- `-n, --no-codegen` + Don't perform codegen before building. + By default, `build` performs a `codegen` step before building your Project. This option skips this step. This is especially useful when you are testing manual changes to your types/bindings. + +- `-s, --strategy ` + Specify which build strategy to use. By default, the `vm` build strategy is used. + Available strategies: + - `vm`: Uses Docker only for the source building part of the build process. At build time, it pulls a pre-built image with all necessary system dependencies, env vars and runtime; and it instantiates a Docker container with it. The Docker container instantiates bind-mounts (volumes) to copy the sources and dependencies from the host, build the sources inside the container, and copy the build artifacts back to the host machine. This approach ensures that the sources will be built in a reproducible environment but it doesn't use Docker for anything else and no image is built at runtime. + - `image`: Implies building a Docker image at runtime, where dependencies are installed and sources are copied and built as Dockerfile instructions. On subsequent builds, Docker tries to reuse cached image layers and rebuild accordingly. This approach is notably slow but the complete process happens in Docker, and can be reproduced, examined and audited layer by layer (from dependency installation to build artifacts output). + - `local` - Does not use Docker at all. It simply executes a .sh file that contains the necessary instructions to install dependencies and build sources. While this is the fastest way of building, it requires you, the user, to have all prerequisite system dependencies installed. In addition, given that sources are built on the host machine and not a reproducible docker environment, reproducibility isn't guaranteed. + +- `-w, --watch` + Watch the Project's files and automatically rebuild when a file is changed. + +### `codegen | g` + +Generate code bindings for Polywrap projects. + +This command generates types and bindings for your project based on your project's schema (found in `schema.graphql`). + +#### Options +- `-m, --manifest-file ` + Specify your project's manifest file. + By default, `docgen` searches for `polywrap.yaml`. + +- `-g, --codegen-dir ` + Specify an alternative directory for codegen output. + The default codegen output directory is `./wrap`. + +- `-p, --publish-dir ` + Output path for the built schema and manifest (default: `./build`) + This only applies when running `codegen` for Plugin Projects. + +- `-s, --script ` + Path to a custom generation script (JavaScript | TypeScript). + This script is run in place of the standard codegen script if provided. + +- `-c, --client-config ` + Use a custom Polywrap Client configuration. + +#### Special note + +When running `codegen` for Plugin Projects, the Polywrap CLI will also output an ABI schema for your plugin into the `./build` directory. You can override this output directory by specifying `-p, --publish-dir `. + +### `create | c` + +Create a Polywrap project. + +This command sets up a basic Polywrap-enabled project based on a pre-defined template. + +#### Subcommands + +`polywrap create wasm ` + +Set up a Polywrap WASM Wrapper or Interface project. + +`polywrap create app ` + +Set up a NodeJS or React application which uses the Polywrap Client to invoke wrappers. + +`polywrap create plugin ` + +Set up a Polywrap Plugin project used to provide the Polywrap Cient with additional functionality. + +#### Arguments + +All subcommands share the following arguments: + +- `language` (required) + The type/language of the created project + +- `name` (required) + The project name. + +#### Options + +All subcommands share the following options: + +- `-o, --output-dir ` + Specifies a custom output directory for the created project. + +#### Sample usage + +```bash +# Create a wrapper project using assemblyscript called "my-wrapper" +polywrap create wasm assemblyscript my-wrapper + +# Create an interface project using assemblyscript called "my-project" +polywrap create wasm interface my-interface + +# Create a React app project using Typescript called "my-react-app" +polywrap create app typescript-react my-react-app + +# Create a Plugin wrapper project using Typescript called "my-plugin" +polywrap create plugin typescript my-plugin +``` + +### `deploy | d` + +Deploy Polywrap projects. + +```bash +polywrap deploy +``` + +`deploy` reads the Deploy manifest (`polywrap.deploy.yaml` by default) and executes the jobs and steps listed inside. + +For more information on the Deploy command and the Deploy manifest, see [Configure Polywrap deployment pipeline](https://docs.polywrap.io/quick-start/build-and-deploy-wasm-wrappers/deploy-pipeline). + +#### Options +- `-m, --manifest-file ` + Specify your project's manifest file. + By default, `deploy` searches for `polywrap.yaml`. + +- `-o, --output-file ` + Output file path for the deploy result + +### `infra | i` + +Modular Infrastructure-As-Code Orchestrator + +```bash +polywrap infra [options] +``` + +The `infra` command is used to set up infrastructure to test and deploy your wrappers locally. + +For more information on the `infra` command and how to create your own Infra modules, see [Configure Polywrap infrastructure pipeline](https://docs.polywrap.io/quick-start/test-wasm-wrappers/infra-pipeline) + +#### Arguments +- `action` (required) + Infra allows you to execute the following actions: + - `up` + Start Polywrap infrastructure + - `down` + Stop Polywrap infrastructure + - `config` + Validate and display Polywrap infrastructure's bundled docker-compose manifest + - `vars` + Show Polywrap infrastructure's required .env variables + +#### Options +- `-m, --manifest-file ` + Specify the `infra` extension manifest file. + By default, `infra` searches for `polywrap.infra.yaml`. + +- `-o, --modules ` + Use only specified modules + +#### Defaults + +Polywrap comes with a default `eth-ens-ipfs` module which can be used to test your wrappers locally: + +``` +polywrap infra up --modules=eth-ens-ipfs +``` + +The default infrastructure module defines a docker container with: + +- A test server at http://localhost:4040 +- A Ganache Ethereum test network at http://localhost:8545 +- An IPFS node at http://localhost:5001 + +It also sets up ENS smart contracts at initialization, so you can build wrappers and deploy them to an ENS registry on your locally hosted testnet. + +Addresses for the components of ENS: +- Registry: `0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab` +- Resolver: `0x5b1869D9A4C187F2EAa108f3062412ecf0526b24` +- Registrar: `0xD833215cBcc3f914bD1C9ece3EE7BF8B14f841bb` +- Reverse Registrar: `0xe982E462b094850F12AF94d21D470e21bE9D0E9C` + +### `test | t` + +Run Test manifests. + +The `test` command executes a series of Wrapper invocations called **steps** organized into **jobs**. +All steps within a job are run in series, while jobs are run in parallel. + +```bash +polywrap test [options] +``` + +#### Options +- `-m, --manifest-file ` + Specify the Workflow extension manifest file. + By default, `run` searches for `polywrap.test.yaml`. + +- `-c, --client-config ` + Use a custom Polywrap Client configuration. + +- `-o, --output-file ` + Specify the output file path for the workflow result + +- `-j, --jobs ` + Specify ids of jobs that you want to run + +#### The Test manifest (`polywrap.test.yaml`) +Basic structure: + +```yaml +# The basic structure of a test file +name: my-test-name #the name of the test +format: 0.1.0 +validation: "path/to/validator.cue" #(optional) path to a validator file (cuelang) +jobs: + first: + steps: #each step is a wrapper invocation that consists of a URI, the invoked method and its arguments + - uri: ens/example.eth + method: helloWorld + args: + arg1: "test" + ... + - ... + jobs: #after all job steps are executed, additional jobs can be run in parallel + ... + second: + ... +``` + +`jobs` is a map of ``, the key being each Job's name. + +```yaml +jobs: + helloWorld: + ... + helloPolywrap: + ... +``` + +Each Job consists of two properties: + - a `steps` collection + - This is a wrapper invocation, consisting of: + - `uri` - the WRAP URI of the wrapper + - `method` - the name of the invoked wrapper method + - `args` (optional) - a map of the invoked method's arguments + - `config` (optional) - a map of client config properties to be added/overridden + - an inner `jobs` map, making the structure of `Job` recursive. + +```yaml +jobs: + helloWorld: + steps: + - uri: ens/helloworld.polywrap.eth #ENS URI + method: helloWorld + args: + name: test + - uri: fs/./hello-polywrap/build #Filesystem URI + method: helloPolywrap + jobs: + innerJob1: + ... + innerJob2: + ... + helloPolywrap: + steps: + ... + jobs: + ... +``` + +When running a Test manifest, all top-level Jobs are run in parallel. Within those Jobs, each step is run in series. After all steps for a Job have been run, the inner `jobs` are run in parallel, with their `steps` run in series, and so on. + +You can reference the result (`data`/`error`) of any step by using the `$` symbol: + +```yaml +jobs: + helloWorld: + steps: + - uri: ens/helloworld.polywrap.eth #ENS URI + method: helloWorld + args: + name: test + - uri: fs/./hello-polywrap/build #Filesystem URI + method: helloPolywrap + jobs: + innerJob1: + steps: + - uri: ens/helloworld.polywrap.eth + method: helloWorld + args: + name: "$helloWorld.1.data" #Reference to `helloWorld`'s 2nd step return value + jobs: + innerJob11: + steps: + - uri: ens/helloworld.polywrap.eth + method: helloWorld + args: + name: "$helloWorld.innerJob1.0.error" #Reference to helloWorld's innerJob1 1st step error +``` + +#### Test validation + +By specifying a `validation` file within your Test manifest, the result of the run will be validated using `cue`. + +Example of a validation file: + +```cuelang +helloWorld: { + $0: { + data: "Hello test!", + error?: _|_, // Never fails + } + $1: { + data: "Hello Polywrap!", + error?: _|_, // Never fails + } + innerJob1: { + $0: { + data: "Hello Hello test!!", + error?: _|_, + } + } +} +``` + +### `docgen | o` + +Generate wrapper documentation for your project. + +```bash +polywrap docgen +``` + +#### Arguments + +- `action` (required) + Specifies the kind of documentation generated. + Values: + - `schema` + Generates GraphQL-like schema for your project. + - `docusaurus` + Generates Docusaurus markdown for your project. + - `jsdoc` + Generates JSDoc markdown for your project. + +#### Options +- `-m, --manifest-file ` + Specify your project's manifest file. + By default, `docgen` searches for `polywrap.yaml`. + +- `-g, --docgen-dir ` + Specify the output directory for generated docs. + By default, `./docs` is used. + +- `-c, --client-config ` + Use a custom Polywrap Client configuration. + +- `-i, --imports` + Generate docs for your project's dependencies as well. + +### `manifest | m` + +Inspect and migrate Polywrap manifests. + +#### Subcommands + +#### `schema | s` + +Output the schema for any of your Project or Extension manifests. + +Usage: +```bash +# Output schema for the current project manifest (polywrap.yaml) +polywrap manifest schema +``` + +##### Arguments + +- `type` + The type of the manifest file. The default value for `type` is `project`. + +##### Options + +- `-r, --raw` + Output the full JSON Schema for the given manifest. + +- `-m, --manifest-file ` + The manifest file for which the schema will be rendered. The `type` argument determines the default manifest file used. + For example, `polywrap manifest schema build` will use `polywrap.build.yaml` as its default manifest file. + +#### `migrate | m` + +Migrate a Project or Extension manifest file to the the latest version, or a version specified. + +Usage: +```bash +# Migrate the current project manifest (polywrap.yaml) +polywrap manifest migrate +``` +##### Arguments + +- `type` + The type of the manifest file. The default value for `type` is `project`. + +##### Options +- `-f, --format ` + Migrate to a specific format instead of the latest. + + Example: + ```bash + # Migrate the current project manfiest to format 0.2.0 + polywrap manifest migrate -f 0.2.0 + # or + polywrap m m -f 0.2.0 + ``` + +- `-m, --manifest-file ` + The manifest file for which the schema will be rendered. The `type` argument determines the default manifest file used. + For example, `polywrap manifest migrate build` will use `polywrap.build.yaml` as its default manifest file. + + Example: + ```bash + # Migrate "custom-manifest.yaml" to the latest format + polywrap manifest migrate -m custom-manifest.yaml + # or + polywrap m m -m custom-manifest.yaml + ``` + +### The `-c, --client-config` option + +The `build`, `codegen`, `docgen` and `test` commands allow the user to configure the Polywrap Client via the `-c, --client-config ` option. + +You can supply a path to a Javascript or Typescript module which exports a function named `getClientConfig`: + +```typescript +// asynchronous option +export async function getClientConfig( + defaultConfigs: Partial +): Promise> + +// synchronous option +export function getClientConfig( + defaultConfigs: Partial +): Partial +``` + +## Logging + +By default, the Polywrap CLI outputs all of its messages to the console. + +### Logging levels +Different levels of output verbosity are supported by using the following options: + +- `-v, --verbose` + Enables logging of informational messages in addition to standard output. + +- `-q, --quiet` + Disables ALL logging. Overrides the `--verbose` option. + +### Logging to a file +You can also tell the Polywrap CLI to save its output to a logfile using the `-l, --log-file [path]` option. + +Specifying the `-l` option without a `path` parameter will create a log file within the `./.polywrap/logs` directory. + +```bash +# Output will be saved to the "./.polywrap/logs" directory +polywrap codegen -l +``` + +Alternatively, you can specify your own log file path. -Integrations: -https://github.com/polywrap/integrations +```bash +# Output will be saved to "my-log-file.log" +polywrap codegen -l my-log-file.log +``` \ No newline at end of file diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index 2321871bdb..409a80f94d 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -136,7 +136,7 @@ "commands_test_error_validatorNotFound": "validate script not found at: {path}", "commands_test_error_outputFileMissing": "{option} option missing {argument} argument", "commands_test_error_clientConfigMissingPath": "{option} option missing {argument} argument", - "commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'getClientConfig' at {module}", + "commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'configure' at {module}", "commands_test_error_clientConfigInvalidFileExt": "Custom client config file: {module} must be a JS/TS file", "commands_test_error_clientConfigNotObject": "Custom client config must be an object", "commands_test_error_redirectsExportNotArray": "Exported redirects must be an array", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index 2321871bdb..409a80f94d 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -136,7 +136,7 @@ "commands_test_error_validatorNotFound": "validate script not found at: {path}", "commands_test_error_outputFileMissing": "{option} option missing {argument} argument", "commands_test_error_clientConfigMissingPath": "{option} option missing {argument} argument", - "commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'getClientConfig' at {module}", + "commands_test_error_clientConfigModuleMissingExport": "Custom client config module missing named export 'configure' at {module}", "commands_test_error_clientConfigInvalidFileExt": "Custom client config file: {module} must be a JS/TS file", "commands_test_error_clientConfigNotObject": "Custom client config must be an object", "commands_test_error_redirectsExportNotArray": "Exported redirects must be an array", diff --git a/packages/cli/package.json b/packages/cli/package.json index 745a0a9656..df5ce49a66 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -55,6 +55,7 @@ "@polywrap/test-env-js": "0.9.3", "@polywrap/wasm-js": "0.9.3", "@polywrap/wrap-manifest-types-js": "0.9.3", + "@polywrap/logging-js": "0.9.3", "axios": "0.21.2", "chalk": "4.1.0", "chokidar": "3.5.1", diff --git a/packages/cli/src/__tests__/unit/jobrunner.spec.ts b/packages/cli/src/__tests__/unit/jobrunner.spec.ts index 9ab4116b48..c1bf8059af 100644 --- a/packages/cli/src/__tests__/unit/jobrunner.spec.ts +++ b/packages/cli/src/__tests__/unit/jobrunner.spec.ts @@ -3,25 +3,26 @@ import { buildWrapper } from "@polywrap/test-env-js"; import { testCases } from "./jobrunner-test-cases"; import { JobRunner } from "../../lib"; import path from "path"; -import { ClientConfigBuilder, ClientConfig } from "@polywrap/client-config-builder-js"; +import { ClientConfigBuilder } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js/build/IClientConfigBuilder"; jest.setTimeout(200000); describe("workflow JobRunner", () => { - let defaultConfig: ClientConfig; + let configBuilder: IClientConfigBuilder; beforeAll(async () => { await buildWrapper( path.join(GetPathToTestWrappers(), "wasm-as", "simple-calculator") ); - defaultConfig = new ClientConfigBuilder().addDefaults().build(); + configBuilder = new ClientConfigBuilder().addDefaults(); }); for (const testCase of testCases) { it(testCase.name, async () => { const ids = Object.keys(testCase.workflow.jobs); const jobRunner = new JobRunner( - defaultConfig, + configBuilder, testCase.onExecution ); await jobRunner.run(testCase.workflow.jobs, ids); diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index bfd6d67deb..0f67605eaa 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -34,7 +34,7 @@ import path from "path"; import readline from "readline"; import { PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; const defaultOutputDir = "./build"; const defaultStrategy = SupportedStrategies.VM; @@ -50,8 +50,8 @@ const supportedProjectTypes = [ type BuildCommandOptions = { manifestFile: string; outputDir: string; - clientConfig: Partial; - codegen: boolean; + configBuilder: IClientConfigBuilder; + codegen: boolean; // defaults to true watch?: boolean; strategy: SupportedStrategies; verbose?: boolean; @@ -101,7 +101,7 @@ export const build: Command = { options.manifestFile, defaultPolywrapManifest ), - clientConfig: await parseClientConfigOption(options.clientConfig), + configBuilder: await parseClientConfigOption(options.clientConfig), outputDir: parseDirOption(options.outputDir, defaultOutputDir), strategy: options.strategy, logFile: parseLogFileOption(options.logFile), @@ -150,7 +150,7 @@ async function run(options: BuildCommandOptions) { watch, manifestFile, outputDir, - clientConfig, + configBuilder, strategy, codegen, verbose, @@ -160,7 +160,9 @@ async function run(options: BuildCommandOptions) { const logger = createLogger({ verbose, quiet, logFile }); // Get Client - const client = new PolywrapClient(clientConfig); + const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + noDefaults: true, + }); const project = await getProjectFromManifest(manifestFile, logger); diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index b6c5690970..78ee3d28d2 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -17,7 +17,7 @@ import { import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; import { PolywrapClient } from "@polywrap/client-js"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; const defaultCodegenDir = "./src/wrap"; @@ -28,7 +28,7 @@ type CodegenCommandOptions = { manifestFile: string; codegenDir: string; script?: string; - clientConfig: Partial; + configBuilder: IClientConfigBuilder; verbose?: boolean; quiet?: boolean; logFile?: string; @@ -69,7 +69,7 @@ export const codegen: Command = { .action(async (options) => { await run({ ...options, - clientConfig: await parseClientConfigOption(options.clientConfig), + configBuilder: await parseClientConfigOption(options.clientConfig), codegenDir: parseDirOption(options.codegenDir, defaultCodegenDir), script: parseCodegenScriptOption(options.script), manifestFile: parseManifestFileOption( @@ -87,7 +87,7 @@ async function run(options: CodegenCommandOptions) { manifestFile, codegenDir, script, - clientConfig, + configBuilder, verbose, quiet, logFile, @@ -95,7 +95,9 @@ async function run(options: CodegenCommandOptions) { const logger = createLogger({ verbose, quiet, logFile }); // Get Client - const client = new PolywrapClient(clientConfig); + const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + noDefaults: true, + }); const project = await getProjectFromManifest(manifestFile, logger); diff --git a/packages/cli/src/commands/docgen.ts b/packages/cli/src/commands/docgen.ts index d9eb1d2e4e..a4f4d8565e 100644 --- a/packages/cli/src/commands/docgen.ts +++ b/packages/cli/src/commands/docgen.ts @@ -20,7 +20,7 @@ import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; import { PolywrapClient } from "@polywrap/client-js"; import chalk from "chalk"; import { Argument } from "commander"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; const commandToPathMap: Record = { schema: schemaScriptPath, @@ -36,7 +36,7 @@ const pathStr = intlMsg.commands_codegen_options_o_path(); type DocgenCommandOptions = { manifestFile: string; docgenDir: string; - clientConfig: Partial; + configBuilder: IClientConfigBuilder; imports: boolean; verbose?: boolean; quiet?: boolean; @@ -108,7 +108,7 @@ export const docgen: Command = { defaultProjectManifestFiles ), docgenDir: parseDirOption(options.docgenDir, defaultDocgenDir), - clientConfig: await parseClientConfigOption(options.clientConfig), + configBuilder: await parseClientConfigOption(options.clientConfig), logFile: parseLogFileOption(options.logFile), }); }); @@ -119,7 +119,7 @@ async function run(command: DocType, options: DocgenCommandOptions) { const { manifestFile, docgenDir, - clientConfig, + configBuilder, imports, verbose, quiet, @@ -144,7 +144,9 @@ async function run(command: DocType, options: DocgenCommandOptions) { // Resolve custom script const customScript = require.resolve(commandToPathMap[command]); - const client = new PolywrapClient(clientConfig); + const client = new PolywrapClient(configBuilder.buildCoreConfig(), { + noDefaults: true, + }); const schemaComposer = new SchemaComposer({ project, diff --git a/packages/cli/src/commands/manifest.ts b/packages/cli/src/commands/manifest.ts index 91a5d044c4..42b3393514 100644 --- a/packages/cli/src/commands/manifest.ts +++ b/packages/cli/src/commands/manifest.ts @@ -527,7 +527,7 @@ const runMigrateCommand = async ( function migrateManifestFile( manifestFile: string, - migrationFn: (input: string, to: string) => string, + migrationFn: (input: string, to: string, logger?: Logger) => string, to: string, logger: Logger ): void { @@ -545,7 +545,7 @@ function migrateManifestFile( encoding: "utf-8", }); - const outputManifestString = migrationFn(manifestString, to); + const outputManifestString = migrationFn(manifestString, to, logger); // Cache the old manifest file const cache = new CacheDirectory({ diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index 2ba80a8750..7dfc7bd3ea 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -21,10 +21,10 @@ import { createLogger } from "./utils/createLogger"; import path from "path"; import yaml from "yaml"; import fs from "fs"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; type WorkflowCommandOptions = { - clientConfig: Partial; + configBuilder: IClientConfigBuilder; manifest: string; jobs?: string[]; validationScript?: string; @@ -74,7 +74,7 @@ export const test: Command = { options.manifestFile, defaultWorkflowManifest ), - clientConfig: await parseClientConfigOption(options.clientConfig), + configBuilder: await parseClientConfigOption(options.clientConfig), outputFile: options.outputFile ? parseWorkflowOutputFilePathOption(options.outputFile) : undefined, @@ -87,7 +87,7 @@ export const test: Command = { const _run = async (options: WorkflowCommandOptions) => { const { manifest, - clientConfig, + configBuilder, outputFile, verbose, quiet, @@ -127,7 +127,7 @@ const _run = async (options: WorkflowCommandOptions) => { workflowOutput.push(output); }; - const jobRunner = new JobRunner(clientConfig, onExecution); + const jobRunner = new JobRunner(configBuilder, onExecution); await jobRunner.run(workflow.jobs, jobs ?? Object.keys(workflow.jobs)); if (outputFile) { diff --git a/packages/cli/src/commands/utils/createLogger.ts b/packages/cli/src/commands/utils/createLogger.ts index bc9ade70cd..1bcf79841a 100644 --- a/packages/cli/src/commands/utils/createLogger.ts +++ b/packages/cli/src/commands/utils/createLogger.ts @@ -1,4 +1,6 @@ -import { Logger, LogLevel, ConsoleLog, Logs, FileLog } from "../../lib"; +import { Logger, ConsoleLog, Logs, FileLog } from "../../lib"; + +import { LogLevel } from "@polywrap/logging-js"; export function createLogger(options: { verbose?: boolean; diff --git a/packages/cli/src/lib/logging/Log.ts b/packages/cli/src/lib/logging/Log.ts index e2a3bcd91b..9aad43d58c 100644 --- a/packages/cli/src/lib/logging/Log.ts +++ b/packages/cli/src/lib/logging/Log.ts @@ -1,9 +1,4 @@ -export enum LogLevel { - DEBUG, - INFO, - WARN, - ERROR, -} +import { LogLevel } from "@polywrap/logging-js"; export abstract class Log { public readonly level: LogLevel; diff --git a/packages/cli/src/lib/logging/Logger.ts b/packages/cli/src/lib/logging/Logger.ts index d927a0bd22..be7a0a231c 100644 --- a/packages/cli/src/lib/logging/Logger.ts +++ b/packages/cli/src/lib/logging/Logger.ts @@ -1,10 +1,12 @@ -import { Log, LogLevel } from "./Log"; +import { Log } from "./Log"; + +import { ILogger, LogLevel } from "@polywrap/logging-js"; export interface Logs { [name: string]: Log; } -export class Logger { +export class Logger implements ILogger { private _logs: Logs; constructor(logs: Logs) { diff --git a/packages/cli/src/lib/logging/logs/ConsoleLog.ts b/packages/cli/src/lib/logging/logs/ConsoleLog.ts index 11b240a158..4404dd869c 100644 --- a/packages/cli/src/lib/logging/logs/ConsoleLog.ts +++ b/packages/cli/src/lib/logging/logs/ConsoleLog.ts @@ -1,6 +1,7 @@ -import { Log, LogLevel } from "../Log"; +import { Log } from "../Log"; import chalk from "chalk"; +import { LogLevel } from "@polywrap/logging-js"; export class ConsoleLog extends Log { constructor(level: LogLevel) { diff --git a/packages/cli/src/lib/logging/logs/FileLog.ts b/packages/cli/src/lib/logging/logs/FileLog.ts index 09eed0a806..6b7a52fb56 100644 --- a/packages/cli/src/lib/logging/logs/FileLog.ts +++ b/packages/cli/src/lib/logging/logs/FileLog.ts @@ -1,7 +1,8 @@ -import { Log, LogLevel } from "../Log"; +import { Log } from "../Log"; import fs, { WriteStream } from "fs"; import path from "path"; +import { LogLevel } from "@polywrap/logging-js"; export class FileLog extends Log { private _logFileStream: WriteStream; diff --git a/packages/cli/src/lib/manifest/migrate/migrateAnyManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateAnyManifest.ts index 62b1af50f5..fa20c1b79c 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateAnyManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateAnyManifest.ts @@ -1,12 +1,14 @@ /* eslint-disable no-empty */ +import { ILogger } from "@polywrap/logging-js"; import YAML from "yaml"; export function migrateAnyManifest( manifestString: string, manifestTypeName: string, - migrateFn: (manifest: unknown, to: string) => unknown, - to: string + migrateFn: (manifest: unknown, to: string, logger?: ILogger) => unknown, + to: string, + logger?: ILogger ): string { let manifest: unknown | undefined; try { @@ -21,7 +23,7 @@ export function migrateAnyManifest( throw Error(`Unable to parse ${manifestTypeName}: ${manifestString}`); } - const newManifest = migrateFn(manifest, to); + const newManifest = migrateFn(manifest, to, logger); const cleanedManifest = JSON.parse(JSON.stringify(newManifest)); delete cleanedManifest.__type; diff --git a/packages/cli/src/lib/manifest/migrate/migrateAppProjectManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateAppProjectManifest.ts index 9b8e920194..c240ea124f 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateAppProjectManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateAppProjectManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migrateAppManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migrateAppProjectManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "AppManifest", migrateAppManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migrateBuildExtensionManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateBuildExtensionManifest.ts index 1d6607f881..60a44a301d 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateBuildExtensionManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateBuildExtensionManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migrateBuildManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migrateBuildExtensionManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "BuildManifest", migrateBuildManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migrateDeployExtensionManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateDeployExtensionManifest.ts index 0b096e63a9..3ed5bb22c4 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateDeployExtensionManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateDeployExtensionManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migrateDeployManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migrateDeployExtensionManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "DeployManifest", migrateDeployManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migrateInfraExtensionManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateInfraExtensionManifest.ts index e7a214810e..253e42f725 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateInfraExtensionManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateInfraExtensionManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migrateInfraManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migrateInfraExtensionManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "InfraManifest", migrateInfraManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migrateMetaExtensionManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateMetaExtensionManifest.ts index c136d4edd2..6ba5c50583 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateMetaExtensionManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateMetaExtensionManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migrateMetaManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migrateMetaExtensionManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "MetaManifest", migrateMetaManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migratePluginProjectManifest.ts b/packages/cli/src/lib/manifest/migrate/migratePluginProjectManifest.ts index 21297e7116..19cd1a3eed 100644 --- a/packages/cli/src/lib/manifest/migrate/migratePluginProjectManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migratePluginProjectManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migratePluginManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migratePluginProjectManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "PluginManifest", migratePluginManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migratePolywrapProjectManifest.ts b/packages/cli/src/lib/manifest/migrate/migratePolywrapProjectManifest.ts index 9c15a4e62b..1bdcf7b5ab 100644 --- a/packages/cli/src/lib/manifest/migrate/migratePolywrapProjectManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migratePolywrapProjectManifest.ts @@ -1,15 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migratePolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; export function migratePolywrapProjectManifest( manifestString: string, - to: string + to: string, + logger?: ILogger ): string { return migrateAnyManifest( manifestString, "PolywrapManifest", migratePolywrapManifest, - to + to, + logger ); } diff --git a/packages/cli/src/lib/manifest/migrate/migrateTestExtensionManifest.ts b/packages/cli/src/lib/manifest/migrate/migrateTestExtensionManifest.ts index cd61504b5b..a72adf4a39 100644 --- a/packages/cli/src/lib/manifest/migrate/migrateTestExtensionManifest.ts +++ b/packages/cli/src/lib/manifest/migrate/migrateTestExtensionManifest.ts @@ -1,12 +1,18 @@ import { migrateAnyManifest } from "./migrateAnyManifest"; import { migratePolywrapWorkflow } from "@polywrap/polywrap-manifest-types-js"; +import { ILogger } from "@polywrap/logging-js"; -export function migrateWorkflow(manifestString: string, to: string): string { +export function migrateWorkflow( + manifestString: string, + to: string, + logger?: ILogger +): string { return migrateAnyManifest( manifestString, "PolywrapWorkflow", migratePolywrapWorkflow, - to + to, + logger ); } diff --git a/packages/cli/src/lib/option-parsers/client-config.ts b/packages/cli/src/lib/option-parsers/client-config.ts index 80c766daf7..ebe0b5b58f 100644 --- a/packages/cli/src/lib/option-parsers/client-config.ts +++ b/packages/cli/src/lib/option-parsers/client-config.ts @@ -1,18 +1,14 @@ -import { validateClientConfig } from "../helpers"; import { intlMsg } from "../intl"; import { importTypescriptModule } from "../system"; import { getTestEnvClientConfig } from "../test-env"; -import { Uri } from "@polywrap/core-js"; -import { - ClientConfigBuilder, - ClientConfig, -} from "@polywrap/client-config-builder-js"; +import { ClientConfigBuilder } from "@polywrap/client-config-builder-js"; import path from "path"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; export async function parseClientConfigOption( clientConfig: string | undefined -): Promise>> { +): Promise { const builder = new ClientConfigBuilder().addDefaults(); try { @@ -38,7 +34,7 @@ export async function parseClientConfigOption( process.exit(1); } - if (!configModule || !configModule.getCustomConfig) { + if (!configModule || !configModule.configure) { const configsModuleMissingExportMessage = intlMsg.commands_test_error_clientConfigModuleMissingExport( { module: configModule } ); @@ -46,16 +42,8 @@ export async function parseClientConfigOption( process.exit(1); } - const customConfig = await configModule.getCustomConfig(); - - try { - validateClientConfig(customConfig); - return builder.add(customConfig).build(); - } catch (e) { - console.error(e.message); - process.exit(1); - } + return await configModule.configure(builder); } else { - return builder.build(); + return builder; } } diff --git a/packages/cli/src/lib/project/manifests/app/load.ts b/packages/cli/src/lib/project/manifests/app/load.ts index 1575b42c4a..26f80d22ef 100644 --- a/packages/cli/src/lib/project/manifests/app/load.ts +++ b/packages/cli/src/lib/project/manifests/app/load.ts @@ -22,7 +22,7 @@ export async function loadAppManifest( } try { - const result = deserializeAppManifest(manifest); + const result = deserializeAppManifest(manifest, { logger: logger }); return Promise.resolve(result); } catch (e) { return Promise.reject(e); diff --git a/packages/cli/src/lib/project/manifests/plugin/load.ts b/packages/cli/src/lib/project/manifests/plugin/load.ts index 6ea1511085..62650124f9 100644 --- a/packages/cli/src/lib/project/manifests/plugin/load.ts +++ b/packages/cli/src/lib/project/manifests/plugin/load.ts @@ -26,7 +26,7 @@ export async function loadPluginManifest( } try { - const result = deserializePluginManifest(manifest); + const result = deserializePluginManifest(manifest, { logger: logger }); return Promise.resolve(result); } catch (e) { return Promise.reject(e); diff --git a/packages/cli/src/lib/project/manifests/polywrap/load.ts b/packages/cli/src/lib/project/manifests/polywrap/load.ts index 9f83b07093..3624caa34c 100644 --- a/packages/cli/src/lib/project/manifests/polywrap/load.ts +++ b/packages/cli/src/lib/project/manifests/polywrap/load.ts @@ -42,7 +42,7 @@ export async function loadPolywrapManifest( } try { - const result = deserializePolywrapManifest(manifest); + const result = deserializePolywrapManifest(manifest, { logger: logger }); return Promise.resolve(result); } catch (e) { return Promise.reject(e); @@ -102,6 +102,7 @@ export async function loadBuildManifest( return deserializeBuildManifest(manifest, { extSchema: extSchema, + logger: logger, }); }; @@ -137,7 +138,7 @@ export async function loadDeployManifest( } try { - let result = deserializeDeployManifest(manifest); + let result = deserializeDeployManifest(manifest, { logger: logger }); result = (loadEnvironmentVariables( (result as unknown) as Record ) as unknown) as DeployManifest; @@ -213,7 +214,7 @@ export async function loadMetaManifest( } try { - const result = deserializeMetaManifest(manifest); + const result = deserializeMetaManifest(manifest, { logger: logger }); return Promise.resolve(result); } catch (e) { return Promise.reject(e); @@ -252,7 +253,7 @@ export async function loadInfraManifest( } try { - let result = deserializeInfraManifest(manifest); + let result = deserializeInfraManifest(manifest, { logger: logger }); result = (loadEnvironmentVariables( (result as unknown) as Record ) as unknown) as InfraManifest; @@ -294,7 +295,7 @@ export async function loadWorkflowManifest( } try { - const result = deserializePolywrapWorkflow(manifest); + const result = deserializePolywrapWorkflow(manifest, { logger: logger }); return Promise.resolve(result); } catch (e) { return Promise.reject(e); diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index a1734c4ecb..9be9cb552e 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -1,11 +1,11 @@ import { JobResult, Status, Step } from "./types"; import { PolywrapClient } from "@polywrap/client-js"; -import { CoreClient, MaybeAsync } from "@polywrap/core-js"; +import { CoreClient, CoreClientConfig, MaybeAsync } from "@polywrap/core-js"; import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; import { - ClientConfigBuilder, ClientConfig, + IClientConfigBuilder, } from "@polywrap/client-config-builder-js"; export class JobRunner { @@ -13,11 +13,13 @@ export class JobRunner { private client: CoreClient; constructor( - private clientConfig: Partial, + private configBuilder: IClientConfigBuilder, private onExecution?: (id: string, JobResult: JobResult) => MaybeAsync ) { this.jobOutput = new Map(); - this.client = new PolywrapClient(this.clientConfig); + this.client = new PolywrapClient(this.configBuilder.buildCoreConfig(), { + noDefaults: true, + }); } async run(jobs: WorkflowJobs, ids: string[]): Promise { @@ -182,12 +184,13 @@ export class JobRunner { let finalClient = this.client; if (step.config) { - const finalConfig = new ClientConfigBuilder() - .add(this.clientConfig) - .add(step.config) - .build(); + const finalConfig = (step.config as Partial).resolver + ? (step.config as CoreClientConfig) + : this.configBuilder + .add(step.config as Partial) + .buildCoreConfig(); - finalClient = new PolywrapClient(finalConfig); + finalClient = new PolywrapClient(finalConfig, { noDefaults: true }); } const invokeResult = await finalClient.invoke({ diff --git a/packages/cli/src/lib/workflow/types.ts b/packages/cli/src/lib/workflow/types.ts index e554b33ef9..f5e8629801 100644 --- a/packages/cli/src/lib/workflow/types.ts +++ b/packages/cli/src/lib/workflow/types.ts @@ -1,5 +1,5 @@ import { ClientConfig } from "@polywrap/client-config-builder-js"; -import { Uri } from "@polywrap/core-js"; +import { CoreClientConfig, Uri } from "@polywrap/core-js"; export interface Step { uri: string | Uri; @@ -7,7 +7,7 @@ export interface Step { args?: { [k: string]: unknown; }; - config?: ClientConfig; + config?: ClientConfig | CoreClientConfig; } export enum Status { diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts new file mode 100644 index 0000000000..d511610be1 --- /dev/null +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -0,0 +1,348 @@ +import { ClientConfig } from "./ClientConfig"; +import { IClientConfigBuilder } from "./IClientConfigBuilder"; +import { ClientConfigBuilder } from "./ClientConfigBuilder"; + +import { + CoreClientConfig, + Uri, + IUriPackage, + IUriWrapper, + Env, + IUriRedirect, +} from "@polywrap/core-js"; +import { UriResolverLike } from "@polywrap/uri-resolvers-js"; + +export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { + protected config: ClientConfig = { + envs: [], + interfaces: [], + redirects: [], + wrappers: [], + packages: [], + resolvers: [], + }; + + abstract addDefaults(): ClientConfigBuilder; + abstract buildCoreConfig(): CoreClientConfig; + + add(config: Partial): ClientConfigBuilder { + if (config.envs) { + this.addEnvs(config.envs); + } + + if (config.interfaces) { + for (const interfaceImpl of config.interfaces) { + this.addInterfaceImplementations( + interfaceImpl.interface, + interfaceImpl.implementations + ); + } + } + + if (config.redirects) { + this.addRedirects(config.redirects); + } + + if (config.wrappers) { + this.addWrappers(config.wrappers); + } + + if (config.packages) { + this.addPackages(config.packages); + } + + if (config.resolvers) { + this.addResolvers(config.resolvers); + } + + return this; + } + + addWrapper(uriWrapper: IUriWrapper): ClientConfigBuilder { + const wrapperUri = Uri.from(uriWrapper.uri); + + const existingRegistration = this.config.wrappers.find((x) => + Uri.equals(x.uri, wrapperUri) + ); + + if (existingRegistration) { + existingRegistration.wrapper = uriWrapper.wrapper; + } else { + this.config.wrappers.push({ + uri: wrapperUri, + wrapper: uriWrapper.wrapper, + }); + } + + return this; + } + + addWrappers(uriWrappers: IUriWrapper[]): ClientConfigBuilder { + for (const uriWrapper of uriWrappers) { + this.addWrapper(uriWrapper); + } + + return this; + } + + removeWrapper(uri: Uri | string): ClientConfigBuilder { + const wrapperUri = Uri.from(uri); + + const idx = this.config.wrappers.findIndex((x) => + Uri.equals(x.uri, wrapperUri) + ); + + if (idx > -1) { + this.config.wrappers.splice(idx, 1); + } + + return this; + } + + addPackage(uriPackage: IUriPackage): ClientConfigBuilder { + const packageUri = Uri.from(uriPackage.uri); + + const existingRegistration = this.config.packages.find((x) => + Uri.equals(x.uri, packageUri) + ); + + if (existingRegistration) { + existingRegistration.package = uriPackage.package; + } else { + this.config.packages.push({ + uri: packageUri, + package: uriPackage.package, + }); + } + + return this; + } + + addPackages(uriPackages: IUriPackage[]): ClientConfigBuilder { + for (const uriPackage of uriPackages) { + this.addPackage(uriPackage); + } + + return this; + } + + removePackage(uri: Uri | string): ClientConfigBuilder { + const packageUri = Uri.from(uri); + + const idx = this.config.packages.findIndex((x) => + Uri.equals(x.uri, packageUri) + ); + + if (idx > -1) { + this.config.packages.splice(idx, 1); + } + + return this; + } + + addEnv(uri: Uri | string, env: Record): ClientConfigBuilder { + const envUri = Uri.from(uri); + + const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); + + if (idx > -1) { + this.config.envs[idx].env = { + ...this.config.envs[idx].env, + ...env, + }; + } else { + this.config.envs.push({ + uri: envUri, + env: env, + }); + } + + return this; + } + + addEnvs(envs: Env[]): ClientConfigBuilder { + for (const env of envs) { + this.addEnv(env.uri, env.env); + } + + return this; + } + + removeEnv(uri: Uri | string): ClientConfigBuilder { + const envUri = Uri.from(uri); + + const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); + + if (idx > -1) { + this.config.envs.splice(idx, 1); + } + + return this; + } + + setEnv(uri: Uri | string, env: Record): ClientConfigBuilder { + const envUri = Uri.from(uri); + + const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); + + if (idx > -1) { + this.config.envs[idx].env = env; + } else { + this.config.envs.push({ + uri: envUri, + env: env, + }); + } + + return this; + } + + addInterfaceImplementation( + interfaceUri: Uri | string, + implementationUri: Uri | string + ): ClientConfigBuilder { + const interfaceUriSanitized = Uri.from(interfaceUri); + const implementationUriSanitized = Uri.from(implementationUri); + + const existingInterface = this.config.interfaces.find((x) => + Uri.equals(x.interface, interfaceUriSanitized) + ); + + if (existingInterface) { + if ( + !existingInterface.implementations.some((x) => + Uri.equals(x, implementationUriSanitized) + ) + ) { + existingInterface.implementations.push(implementationUriSanitized); + } + } else { + this.config.interfaces.push({ + interface: interfaceUriSanitized, + implementations: [implementationUriSanitized], + }); + } + + return this; + } + + addInterfaceImplementations( + interfaceUri: Uri | string, + implementationUris: Array + ): ClientConfigBuilder { + const interfaceUriSanitized = Uri.from(interfaceUri); + const implementationUrisSanitized = implementationUris.map(Uri.from); + + const existingInterface = this.config.interfaces.find((x) => + Uri.equals(x.interface, interfaceUriSanitized) + ); + + if (existingInterface) { + for (const implUri of implementationUrisSanitized) { + if ( + !existingInterface.implementations.some((x) => Uri.equals(x, implUri)) + ) { + existingInterface.implementations.push(implUri); + } + } + } else { + this.config.interfaces.push({ + interface: interfaceUriSanitized, + implementations: implementationUrisSanitized, + }); + } + + return this; + } + + removeInterfaceImplementation( + interfaceUri: Uri | string, + implementationUri: Uri | string + ): ClientConfigBuilder { + const interfaceUriSanitized = Uri.from(interfaceUri); + const implementationUriSanitized = Uri.from(implementationUri); + + const existingInterface = this.config.interfaces.find((x) => + Uri.equals(x.interface, interfaceUriSanitized) + ); + + if (existingInterface) { + const idx = existingInterface.implementations.findIndex((x) => + Uri.equals(x, implementationUriSanitized) + ); + + if (idx > -1) { + existingInterface.implementations.splice(idx, 1); + } + + if (existingInterface.implementations.length === 0) { + this.config.interfaces.splice( + this.config.interfaces.indexOf(existingInterface), + 1 + ); + } + } + + return this; + } + + addRedirect(from: Uri | string, to: Uri | string): ClientConfigBuilder { + const fromSanitized = Uri.from(from); + const toSanitized = Uri.from(to); + + const existingRedirect = this.config.redirects.find((x) => + Uri.equals(x.from, fromSanitized) + ); + + if (existingRedirect) { + existingRedirect.to = toSanitized; + } else { + this.config.redirects.push({ + from: fromSanitized, + to: toSanitized, + }); + } + + return this; + } + + addRedirects(redirects: IUriRedirect[]): ClientConfigBuilder { + for (const redirect of redirects) { + this.addRedirect(redirect.from, redirect.to); + } + + return this; + } + + removeRedirect(from: Uri | string): ClientConfigBuilder { + const fromSanitized = Uri.from(from); + + const idx = this.config.redirects.findIndex((x) => + Uri.equals(x.from, fromSanitized) + ); + + if (idx > -1) { + this.config.redirects.splice(idx, 1); + } + + return this; + } + + addResolver(resolver: UriResolverLike): ClientConfigBuilder { + this.config.resolvers.push(resolver); + + return this; + } + + addResolvers(resolvers: UriResolverLike[]): ClientConfigBuilder { + for (const resolver of resolvers) { + this.addResolver(resolver); + } + + return this; + } + + build(): ClientConfig { + return this.config; + } +} diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index c5d53bc829..df03629544 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -1,383 +1,48 @@ import { getDefaultConfig } from "./bundles"; -import { ClientConfig } from "./ClientConfig"; +import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; -import { - CoreClientConfig, - Uri, - IUriResolver, - IUriPackage, - IUriWrapper, - Env, - IUriRedirect, -} from "@polywrap/core-js"; +import { CoreClientConfig, Uri, IUriResolver } from "@polywrap/core-js"; import { IWrapperCache, LegacyRedirectsResolver, PackageToWrapperCacheResolver, RecursiveResolver, StaticResolver, - UriResolverLike, WrapperCache, } from "@polywrap/uri-resolvers-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; -export class ClientConfigBuilder { - private _config: ClientConfig = { - envs: [], - interfaces: [], - redirects: [], - wrappers: [], - packages: [], - resolvers: [], - }; - - add(config: Partial): ClientConfigBuilder { - if (config.envs) { - this.addEnvs(config.envs); - } - - if (config.interfaces) { - for (const interfaceImpl of config.interfaces) { - this.addInterfaceImplementations( - interfaceImpl.interface, - interfaceImpl.implementations - ); - } - } - - if (config.redirects) { - this.addRedirects(config.redirects); - } - - if (config.wrappers) { - this.addWrappers(config.wrappers); - } - - if (config.packages) { - this.addPackages(config.packages); - } - - if (config.resolvers) { - this.addResolvers(config.resolvers); - } - - return this; +export class ClientConfigBuilder extends BaseClientConfigBuilder { + constructor( + private readonly wrapperCache?: IWrapperCache, + private readonly resolver?: IUriResolver + ) { + super(); } addDefaults(): ClientConfigBuilder { return this.add(getDefaultConfig()); } - addWrapper(uriWrapper: IUriWrapper): ClientConfigBuilder { - const wrapperUri = Uri.from(uriWrapper.uri); - - const existingRegistration = this._config.wrappers.find((x) => - Uri.equals(x.uri, wrapperUri) - ); - - if (existingRegistration) { - existingRegistration.wrapper = uriWrapper.wrapper; - } else { - this._config.wrappers.push({ - uri: wrapperUri, - wrapper: uriWrapper.wrapper, - }); - } - - return this; - } - - addWrappers(uriWrappers: IUriWrapper[]): ClientConfigBuilder { - for (const uriWrapper of uriWrappers) { - this.addWrapper(uriWrapper); - } - - return this; - } - - removeWrapper(uri: Uri | string): ClientConfigBuilder { - const wrapperUri = Uri.from(uri); - - const idx = this._config.wrappers.findIndex((x) => - Uri.equals(x.uri, wrapperUri) - ); - - if (idx > -1) { - this._config.wrappers.splice(idx, 1); - } - - return this; - } - - addPackage(uriPackage: IUriPackage): ClientConfigBuilder { - const packageUri = Uri.from(uriPackage.uri); - - const existingRegistration = this._config.packages.find((x) => - Uri.equals(x.uri, packageUri) - ); - - if (existingRegistration) { - existingRegistration.package = uriPackage.package; - } else { - this._config.packages.push({ - uri: packageUri, - package: uriPackage.package, - }); - } - - return this; - } - - addPackages(uriPackages: IUriPackage[]): ClientConfigBuilder { - for (const uriPackage of uriPackages) { - this.addPackage(uriPackage); - } - - return this; - } - - removePackage(uri: Uri | string): ClientConfigBuilder { - const packageUri = Uri.from(uri); - - const idx = this._config.packages.findIndex((x) => - Uri.equals(x.uri, packageUri) - ); - - if (idx > -1) { - this._config.packages.splice(idx, 1); - } - - return this; - } - - addEnv(uri: Uri | string, env: Record): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this._config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this._config.envs[idx].env = { - ...this._config.envs[idx].env, - ...env, - }; - } else { - this._config.envs.push({ - uri: envUri, - env: env, - }); - } - - return this; - } - - addEnvs(envs: Env[]): ClientConfigBuilder { - for (const env of envs) { - this.addEnv(env.uri, env.env); - } - - return this; - } - - removeEnv(uri: Uri | string): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this._config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this._config.envs.splice(idx, 1); - } - - return this; - } - - setEnv(uri: Uri | string, env: Record): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this._config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this._config.envs[idx].env = env; - } else { - this._config.envs.push({ - uri: envUri, - env: env, - }); - } - - return this; - } - - addInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUriSanitized = Uri.from(implementationUri); - - const existingInterface = this._config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); - - if (existingInterface) { - if ( - !existingInterface.implementations.some((x) => - Uri.equals(x, implementationUriSanitized) - ) - ) { - existingInterface.implementations.push(implementationUriSanitized); - } - } else { - this._config.interfaces.push({ - interface: interfaceUriSanitized, - implementations: [implementationUriSanitized], - }); - } - - return this; - } - - addInterfaceImplementations( - interfaceUri: Uri | string, - implementationUris: Array - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUrisSanitized = implementationUris.map(Uri.from); - - const existingInterface = this._config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); - - if (existingInterface) { - for (const implUri of implementationUrisSanitized) { - if ( - !existingInterface.implementations.some((x) => Uri.equals(x, implUri)) - ) { - existingInterface.implementations.push(implUri); - } - } - } else { - this._config.interfaces.push({ - interface: interfaceUriSanitized, - implementations: implementationUrisSanitized, - }); - } - - return this; - } - - removeInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUriSanitized = Uri.from(implementationUri); - - const existingInterface = this._config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); - - if (existingInterface) { - const idx = existingInterface.implementations.findIndex((x) => - Uri.equals(x, implementationUriSanitized) - ); - - if (idx > -1) { - existingInterface.implementations.splice(idx, 1); - } - - if (existingInterface.implementations.length === 0) { - this._config.interfaces.splice( - this._config.interfaces.indexOf(existingInterface), - 1 - ); - } - } - - return this; - } - - addRedirect(from: Uri | string, to: Uri | string): ClientConfigBuilder { - const fromSanitized = Uri.from(from); - const toSanitized = Uri.from(to); - - const existingRedirect = this._config.redirects.find((x) => - Uri.equals(x.from, fromSanitized) - ); - - if (existingRedirect) { - existingRedirect.to = toSanitized; - } else { - this._config.redirects.push({ - from: fromSanitized, - to: toSanitized, - }); - } - - return this; - } - - addRedirects(redirects: IUriRedirect[]): ClientConfigBuilder { - for (const redirect of redirects) { - this.addRedirect(redirect.from, redirect.to); - } - - return this; - } - - removeUriRedirect(from: Uri | string): ClientConfigBuilder { - const fromSanitized = Uri.from(from); - - const idx = this._config.redirects.findIndex((x) => - Uri.equals(x.from, fromSanitized) - ); - - if (idx > -1) { - this._config.redirects.splice(idx, 1); - } - - return this; - } - - addResolver(resolver: UriResolverLike): ClientConfigBuilder { - this._config.resolvers.push(resolver); - - return this; - } - - addResolvers(resolvers: UriResolverLike[]): ClientConfigBuilder { - for (const resolver of resolvers) { - this.addResolver(resolver); - } - - return this; - } - - build(): ClientConfig { - return this._config; - } - - buildDefault( - wrapperCache?: IWrapperCache, - resolver?: IUriResolver - ): CoreClientConfig { + buildCoreConfig(): CoreClientConfig { return { - envs: this._config.envs, - interfaces: this._config.interfaces, - redirects: this._config.redirects, + envs: this.config.envs, + interfaces: this.config.interfaces, + redirects: this.config.redirects, resolver: - resolver ?? + this.resolver ?? RecursiveResolver.from( PackageToWrapperCacheResolver.from( [ new LegacyRedirectsResolver(), StaticResolver.from([ - ...this._config.wrappers, - ...this._config.packages, + ...this.config.wrappers, + ...this.config.packages, ]), - ...this._config.resolvers, + ...this.config.resolvers, new ExtendableUriResolver(), ], - wrapperCache ?? new WrapperCache() + this.wrapperCache ?? new WrapperCache() ) ), }; diff --git a/packages/js/client-config-builder/src/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/IClientConfigBuilder.ts new file mode 100644 index 0000000000..a9da5352ba --- /dev/null +++ b/packages/js/client-config-builder/src/IClientConfigBuilder.ts @@ -0,0 +1,45 @@ +import { ClientConfig } from "./ClientConfig"; + +import { + CoreClientConfig, + Uri, + IUriPackage, + IUriWrapper, + Env, + IUriRedirect, +} from "@polywrap/core-js"; +import { UriResolverLike } from "@polywrap/uri-resolvers-js"; + +export interface IClientConfigBuilder { + build(): ClientConfig; + buildCoreConfig(): CoreClientConfig; + add(config: Partial): IClientConfigBuilder; + addDefaults(): IClientConfigBuilder; + addWrapper(uriWrapper: IUriWrapper): IClientConfigBuilder; + addWrappers(uriWrappers: IUriWrapper[]): IClientConfigBuilder; + removeWrapper(uri: Uri | string): IClientConfigBuilder; + addPackage(uriPackage: IUriPackage): IClientConfigBuilder; + addPackages(uriPackages: IUriPackage[]): IClientConfigBuilder; + removePackage(uri: Uri | string): IClientConfigBuilder; + addEnv(uri: Uri | string, env: Record): IClientConfigBuilder; + addEnvs(envs: Env[]): IClientConfigBuilder; + removeEnv(uri: Uri | string): IClientConfigBuilder; + setEnv(uri: Uri | string, env: Record): IClientConfigBuilder; + addInterfaceImplementation( + interfaceUri: Uri | string, + implementationUri: Uri | string + ): IClientConfigBuilder; + addInterfaceImplementations( + interfaceUri: Uri | string, + implementationUris: Array + ): IClientConfigBuilder; + removeInterfaceImplementation( + interfaceUri: Uri | string, + implementationUri: Uri | string + ): IClientConfigBuilder; + addRedirect(from: Uri | string, to: Uri | string): IClientConfigBuilder; + addRedirects(redirects: IUriRedirect[]): IClientConfigBuilder; + removeRedirect(from: Uri | string): IClientConfigBuilder; + addResolver(resolver: UriResolverLike): IClientConfigBuilder; + addResolvers(resolvers: UriResolverLike[]): IClientConfigBuilder; +} diff --git a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts index c27ffa4c28..180827a425 100644 --- a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts +++ b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts @@ -588,7 +588,7 @@ describe("Client config builder", () => { const config = new ClientConfigBuilder() .addRedirect(from1, to1) .addRedirect(from2, to2) - .removeUriRedirect(from1) + .removeRedirect(from1) .build(); expect(config.redirects).toHaveLength(1); diff --git a/packages/js/client-config-builder/src/index.ts b/packages/js/client-config-builder/src/index.ts index ce72c63807..0280e13ee1 100644 --- a/packages/js/client-config-builder/src/index.ts +++ b/packages/js/client-config-builder/src/index.ts @@ -1,3 +1,5 @@ -export * from "./ClientConfigBuilder"; +export * from "./BaseClientConfigBuilder"; export * from "./ClientConfig"; +export * from "./ClientConfigBuilder"; +export * from "./IClientConfigBuilder"; export * from "./bundles"; diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 274ca06047..ed597cad91 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -707,7 +707,7 @@ export class PolywrapClient implements CoreClient { private buildConfigFromPolywrapClientConfig( config?: PolywrapClientConfig ): PolywrapCoreClientConfig { - const builder = new ClientConfigBuilder(); + const builder = new ClientConfigBuilder(config?.wrapperCache); builder.addDefaults(); @@ -715,7 +715,7 @@ export class PolywrapClient implements CoreClient { builder.add(config); } - const sanitizedConfig = builder.buildDefault(config?.wrapperCache); + const sanitizedConfig = builder.buildCoreConfig(); return { ...sanitizedConfig, diff --git a/packages/js/client/src/__tests__/core/interface-impls.spec.ts b/packages/js/client/src/__tests__/core/interface-impls.spec.ts index fbafdfde59..85d94bad0d 100644 --- a/packages/js/client/src/__tests__/core/interface-impls.spec.ts +++ b/packages/js/client/src/__tests__/core/interface-impls.spec.ts @@ -185,7 +185,7 @@ describe("interface-impls", () => { const implementationUris = interfaces[0].implementations; const builder = new ClientConfigBuilder(); - const defaultClientConfig = builder.addDefaults().buildDefault(); + const defaultClientConfig = builder.addDefaults().buildCoreConfig(); expect(implementationUris).toEqual([ ...(defaultClientConfig.interfaces || []).find( diff --git a/packages/js/client/src/__tests__/e2e/test-cases.ts b/packages/js/client/src/__tests__/e2e/test-cases.ts index 696f29f388..3fe4a1248c 100644 --- a/packages/js/client/src/__tests__/e2e/test-cases.ts +++ b/packages/js/client/src/__tests__/e2e/test-cases.ts @@ -1122,10 +1122,10 @@ export const runSubinvokeTest = async (client: CoreClient, uri: string) => { { const response = await client.invoke({ uri, - method: "add", + method: "addAndIncrement", args: { a: 1, - b: 2, + b: 1, }, }); diff --git a/packages/js/logging/README.md b/packages/js/logging/README.md new file mode 100644 index 0000000000..5a12e12ff3 --- /dev/null +++ b/packages/js/logging/README.md @@ -0,0 +1,8 @@ +# @polywrap/logging-js + +An interface to which Loggers within the Polywrap Toolchain must conform. + +Contains: + +- `ILogger.ts` - the logger interface +- `LogLevel.ts` - the log levels supported by the logger \ No newline at end of file diff --git a/packages/js/logging/package.json b/packages/js/logging/package.json new file mode 100644 index 0000000000..3e85bd2082 --- /dev/null +++ b/packages/js/logging/package.json @@ -0,0 +1,28 @@ +{ + "name": "@polywrap/logging-js", + "description": "Polywrap Core Logging Interface", + "version": "0.9.3", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/polywrap/monorepo.git" + }, + "main": "build/index.js", + "files": [ + "build" + ], + "scripts": { + "build": "rimraf ./build && tsc --project tsconfig.build.json", + "lint": "eslint --color -c ../../../.eslintrc.js src/" + }, + "dependencies": { + }, + "devDependencies": { + "rimraf": "3.0.2", + "typescript": "4.1.6" + }, + "gitHead": "7346adaf5adb7e6bbb70d9247583e995650d390a", + "publishConfig": { + "access": "public" + } +} diff --git a/packages/js/logging/src/ILogger.ts b/packages/js/logging/src/ILogger.ts new file mode 100644 index 0000000000..6a3feafd0e --- /dev/null +++ b/packages/js/logging/src/ILogger.ts @@ -0,0 +1,9 @@ +import { LogLevel } from "./LogLevel"; + +export interface ILogger { + log(message: string, level: LogLevel): void; + debug(message: string): void; + info(message: string): void; + warn(message: string): void; + error(message: string): void; +} diff --git a/packages/js/logging/src/LogLevel.ts b/packages/js/logging/src/LogLevel.ts new file mode 100644 index 0000000000..0d3dfddab5 --- /dev/null +++ b/packages/js/logging/src/LogLevel.ts @@ -0,0 +1,6 @@ +export enum LogLevel { + DEBUG, + INFO, + WARN, + ERROR, +} diff --git a/packages/js/logging/src/index.ts b/packages/js/logging/src/index.ts new file mode 100644 index 0000000000..104d497d05 --- /dev/null +++ b/packages/js/logging/src/index.ts @@ -0,0 +1,2 @@ +export * from "./ILogger"; +export * from "./LogLevel"; diff --git a/packages/js/logging/tsconfig.build.json b/packages/js/logging/tsconfig.build.json new file mode 100644 index 0000000000..77aadfdd2f --- /dev/null +++ b/packages/js/logging/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "./src/**/*.ts" + ], + "exclude": [ + "./src/**/__tests__" + ] +} diff --git a/packages/js/logging/tsconfig.json b/packages/js/logging/tsconfig.json new file mode 100644 index 0000000000..fd4ebb1a2c --- /dev/null +++ b/packages/js/logging/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig", + "compilerOptions": { + "outDir": "build", + "typeRoots": [ + "./src/**/*.d.ts" + ] + }, + "include": [ + "./src/**/*.ts" + ], + "exclude": [] +} diff --git a/packages/js/manifests/polywrap/package.json b/packages/js/manifests/polywrap/package.json index b3a7ab2ff7..c27dfcbc89 100644 --- a/packages/js/manifests/polywrap/package.json +++ b/packages/js/manifests/polywrap/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@polywrap/polywrap-manifest-schemas": "0.9.3", + "@polywrap/logging-js": "0.9.3", "jsonschema": "1.4.0", "semver": "7.3.5", "yaml": "2.1.3" diff --git a/packages/js/manifests/polywrap/scripts/templates/deserialize-ts.mustache b/packages/js/manifests/polywrap/scripts/templates/deserialize-ts.mustache index 8f2a42a7a0..bf84a74a02 100644 --- a/packages/js/manifests/polywrap/scripts/templates/deserialize-ts.mustache +++ b/packages/js/manifests/polywrap/scripts/templates/deserialize-ts.mustache @@ -46,8 +46,11 @@ export function deserialize{{type}}( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`{{type}} is using an older version of the manifest format (${any{{type}}.format}). Please update your manifest to the latest version (${latest{{type}}Format}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrate{{type}}(any{{type}}, latest{{type}}Format); + return migrate{{type}}(any{{type}}, latest{{type}}Format, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/scripts/templates/migrate-ts.mustache b/packages/js/manifests/polywrap/scripts/templates/migrate-ts.mustache index d53a3f4bbc..28f60b5da0 100644 --- a/packages/js/manifests/polywrap/scripts/templates/migrate-ts.mustache +++ b/packages/js/manifests/polywrap/scripts/templates/migrate-ts.mustache @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrate{{#latest}}{{type}}{{/latest}}( manifest: Any{{#latest}}{{type}}{{/latest}}, - to: {{#latest}}{{type}}{{/latest}}Formats + to: {{#latest}}{{type}}{{/latest}}Formats, + logger?: ILogger ): {{#latest}}{{type}}{{/latest}} { let from = manifest.format as {{#latest}}{{type}}{{/latest}}Formats; @@ -36,7 +38,7 @@ export function migrate{{#latest}}{{type}}{{/latest}}( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as Any{{#latest}}{{type}}{{/latest}}; + newManifest = migrator.migrate(newManifest, logger) as Any{{#latest}}{{type}}{{/latest}}; } return newManifest as {{#latest}}{{type}}{{/latest}}; diff --git a/packages/js/manifests/polywrap/src/deserialize.ts b/packages/js/manifests/polywrap/src/deserialize.ts index 1b9b15de8c..f9978da96b 100644 --- a/packages/js/manifests/polywrap/src/deserialize.ts +++ b/packages/js/manifests/polywrap/src/deserialize.ts @@ -1,6 +1,8 @@ +import { ILogger } from "@polywrap/logging-js"; import { Schema as JsonSchema } from "jsonschema"; export interface DeserializeManifestOptions { noValidate?: boolean; extSchema?: JsonSchema; + logger?: ILogger; } diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.app/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.app/deserialize.ts index 5fe1e79b5c..eb4c676f02 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.app/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.app/deserialize.ts @@ -46,8 +46,11 @@ export function deserializeAppManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`AppManifest is using an older version of the manifest format (${anyAppManifest.format}). Please update your manifest to the latest version (${latestAppManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrateAppManifest(anyAppManifest, latestAppManifestFormat); + return migrateAppManifest(anyAppManifest, latestAppManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.app/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.app/migrate.ts index d5223e4cdb..fed54c5544 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.app/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.app/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrateAppManifest( manifest: AnyAppManifest, - to: AppManifestFormats + to: AppManifestFormats, + logger?: ILogger ): AppManifest { let from = manifest.format as AppManifestFormats; @@ -36,7 +38,7 @@ export function migrateAppManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyAppManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyAppManifest; } return newManifest as AppManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.app/migrators/0.1.0_to_0.2.0.ts b/packages/js/manifests/polywrap/src/formats/polywrap.app/migrators/0.1.0_to_0.2.0.ts index ebe4c40017..76ccd8504a 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.app/migrators/0.1.0_to_0.2.0.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.app/migrators/0.1.0_to_0.2.0.ts @@ -1,7 +1,18 @@ +import { ILogger } from "@polywrap/logging-js"; import { AppManifest as OldManifest } from "../0.1.0"; import { AppManifest as NewManifest } from "../0.2.0"; -export function migrate(manifest: OldManifest): NewManifest { +export function migrate(manifest: OldManifest, logger?: ILogger): NewManifest { + if ( + manifest.import_redirects?.some((x) => + x.schema.includes("build/schema.graphql") + ) + ) { + logger?.warn( + `Detected a reference to "build/schema.graphql" in "import_redirects". Consider using "build/wrap.info" instead of "build/schema.graphql" in "source.import_abis", schema.graphql is no longer emitted as a build artifact.` + ); + } + return { format: "0.2.0", project: { @@ -19,4 +30,4 @@ export function migrate(manifest: OldManifest): NewManifest { // eslint-disable-next-line @typescript-eslint/naming-convention __type: "AppManifest", }; -}; +} diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.build/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.build/deserialize.ts index 2d69bb2ebd..8047d9f8ba 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.build/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.build/deserialize.ts @@ -46,8 +46,11 @@ export function deserializeBuildManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`BuildManifest is using an older version of the manifest format (${anyBuildManifest.format}). Please update your manifest to the latest version (${latestBuildManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrateBuildManifest(anyBuildManifest, latestBuildManifestFormat); + return migrateBuildManifest(anyBuildManifest, latestBuildManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.build/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.build/migrate.ts index ba82b20295..0c2cc19772 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.build/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.build/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrateBuildManifest( manifest: AnyBuildManifest, - to: BuildManifestFormats + to: BuildManifestFormats, + logger?: ILogger ): BuildManifest { let from = manifest.format as BuildManifestFormats; @@ -36,7 +38,7 @@ export function migrateBuildManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyBuildManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyBuildManifest; } return newManifest as BuildManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.deploy/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.deploy/deserialize.ts index 19251abbf6..f08d027586 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.deploy/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.deploy/deserialize.ts @@ -46,8 +46,11 @@ export function deserializeDeployManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`DeployManifest is using an older version of the manifest format (${anyDeployManifest.format}). Please update your manifest to the latest version (${latestDeployManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrateDeployManifest(anyDeployManifest, latestDeployManifestFormat); + return migrateDeployManifest(anyDeployManifest, latestDeployManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.deploy/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.deploy/migrate.ts index 09cc08fda8..9157408e14 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.deploy/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.deploy/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrateDeployManifest( manifest: AnyDeployManifest, - to: DeployManifestFormats + to: DeployManifestFormats, + logger?: ILogger ): DeployManifest { let from = manifest.format as DeployManifestFormats; @@ -36,7 +38,7 @@ export function migrateDeployManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyDeployManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyDeployManifest; } return newManifest as DeployManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.infra/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.infra/deserialize.ts index ee7a3ffe78..65aba2b2ed 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.infra/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.infra/deserialize.ts @@ -46,8 +46,11 @@ export function deserializeInfraManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`InfraManifest is using an older version of the manifest format (${anyInfraManifest.format}). Please update your manifest to the latest version (${latestInfraManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrateInfraManifest(anyInfraManifest, latestInfraManifestFormat); + return migrateInfraManifest(anyInfraManifest, latestInfraManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.infra/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.infra/migrate.ts index ee769e3f9d..32a8551636 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.infra/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.infra/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrateInfraManifest( manifest: AnyInfraManifest, - to: InfraManifestFormats + to: InfraManifestFormats, + logger?: ILogger ): InfraManifest { let from = manifest.format as InfraManifestFormats; @@ -36,7 +38,7 @@ export function migrateInfraManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyInfraManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyInfraManifest; } return newManifest as InfraManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.meta/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.meta/deserialize.ts index 69908632b2..14e7bc7532 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.meta/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.meta/deserialize.ts @@ -46,8 +46,11 @@ export function deserializeMetaManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`MetaManifest is using an older version of the manifest format (${anyMetaManifest.format}). Please update your manifest to the latest version (${latestMetaManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migrateMetaManifest(anyMetaManifest, latestMetaManifestFormat); + return migrateMetaManifest(anyMetaManifest, latestMetaManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.meta/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.meta/migrate.ts index d9066967bc..21f1960e80 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.meta/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.meta/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migrateMetaManifest( manifest: AnyMetaManifest, - to: MetaManifestFormats + to: MetaManifestFormats, + logger?: ILogger ): MetaManifest { let from = manifest.format as MetaManifestFormats; @@ -36,7 +38,7 @@ export function migrateMetaManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyMetaManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyMetaManifest; } return newManifest as MetaManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/deserialize.ts index e2e48aa572..e2035e0a13 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/deserialize.ts @@ -46,8 +46,11 @@ export function deserializePluginManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`PluginManifest is using an older version of the manifest format (${anyPluginManifest.format}). Please update your manifest to the latest version (${latestPluginManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migratePluginManifest(anyPluginManifest, latestPluginManifestFormat); + return migratePluginManifest(anyPluginManifest, latestPluginManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrate.ts index 462745b609..08e0292260 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migratePluginManifest( manifest: AnyPluginManifest, - to: PluginManifestFormats + to: PluginManifestFormats, + logger?: ILogger ): PluginManifest { let from = manifest.format as PluginManifestFormats; @@ -36,7 +38,7 @@ export function migratePluginManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyPluginManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyPluginManifest; } return newManifest as PluginManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrators/0.1.0_to_0.2.0.ts b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrators/0.1.0_to_0.2.0.ts index 9d13075cc2..b453300a90 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrators/0.1.0_to_0.2.0.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.plugin/migrators/0.1.0_to_0.2.0.ts @@ -1,7 +1,18 @@ +import { ILogger } from "@polywrap/logging-js"; import { PluginManifest as OldManifest } from "../0.1.0"; import { PluginManifest as NewManifest } from "../0.2.0"; -export function migrate(manifest: OldManifest): NewManifest { +export function migrate(manifest: OldManifest, logger?: ILogger): NewManifest { + if ( + manifest.import_redirects?.some((x) => + x.schema.includes("build/schema.graphql") + ) + ) { + logger?.warn( + `Detected a reference to "build/schema.graphql" in "import_redirects". Consider using "build/wrap.info" instead of "build/schema.graphql" in "source.import_abis", schema.graphql is no longer emitted as a build artifact.` + ); + } + return { format: "0.2.0", project: { @@ -20,4 +31,4 @@ export function migrate(manifest: OldManifest): NewManifest { // eslint-disable-next-line @typescript-eslint/naming-convention __type: "PluginManifest", }; -}; +} diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.test/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap.test/deserialize.ts index da27d002c9..382319fd08 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.test/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.test/deserialize.ts @@ -46,8 +46,11 @@ export function deserializePolywrapWorkflow( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`PolywrapWorkflow is using an older version of the manifest format (${anyPolywrapWorkflow.format}). Please update your manifest to the latest version (${latestPolywrapWorkflowFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migratePolywrapWorkflow(anyPolywrapWorkflow, latestPolywrapWorkflowFormat); + return migratePolywrapWorkflow(anyPolywrapWorkflow, latestPolywrapWorkflowFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap.test/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap.test/migrate.ts index fab4a75251..31fae66825 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap.test/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap.test/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migratePolywrapWorkflow( manifest: AnyPolywrapWorkflow, - to: PolywrapWorkflowFormats + to: PolywrapWorkflowFormats, + logger?: ILogger ): PolywrapWorkflow { let from = manifest.format as PolywrapWorkflowFormats; @@ -36,7 +38,7 @@ export function migratePolywrapWorkflow( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyPolywrapWorkflow; + newManifest = migrator.migrate(newManifest, logger) as AnyPolywrapWorkflow; } return newManifest as PolywrapWorkflow; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap/deserialize.ts b/packages/js/manifests/polywrap/src/formats/polywrap/deserialize.ts index 679f447dfd..f0f68ac814 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap/deserialize.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap/deserialize.ts @@ -46,8 +46,11 @@ export function deserializePolywrapManifest( ); if (versionCompare === -1) { + // Warn user to migrate their manifest + options?.logger?.warn(`PolywrapManifest is using an older version of the manifest format (${anyPolywrapManifest.format}). Please update your manifest to the latest version (${latestPolywrapManifestFormat}) by using the "polywrap manifest migrate " command.`); + // Upgrade - return migratePolywrapManifest(anyPolywrapManifest, latestPolywrapManifestFormat); + return migratePolywrapManifest(anyPolywrapManifest, latestPolywrapManifestFormat, options?.logger); } else if (versionCompare === 1) { // Downgrade throw Error( diff --git a/packages/js/manifests/polywrap/src/formats/polywrap/migrate.ts b/packages/js/manifests/polywrap/src/formats/polywrap/migrate.ts index 300cd6dc68..78c62a3f75 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap/migrate.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap/migrate.ts @@ -11,10 +11,12 @@ import { } from "."; import { findShortestMigrationPath } from "../../migrations"; import { migrators } from "./migrators"; +import { ILogger } from "@polywrap/logging-js"; export function migratePolywrapManifest( manifest: AnyPolywrapManifest, - to: PolywrapManifestFormats + to: PolywrapManifestFormats, + logger?: ILogger ): PolywrapManifest { let from = manifest.format as PolywrapManifestFormats; @@ -36,7 +38,7 @@ export function migratePolywrapManifest( let newManifest = manifest; for(const migrator of migrationPath){ - newManifest = migrator.migrate(newManifest) as AnyPolywrapManifest; + newManifest = migrator.migrate(newManifest, logger) as AnyPolywrapManifest; } return newManifest as PolywrapManifest; diff --git a/packages/js/manifests/polywrap/src/formats/polywrap/migrators/0.1.0_to_0.2.0.ts b/packages/js/manifests/polywrap/src/formats/polywrap/migrators/0.1.0_to_0.2.0.ts index e8c687fdbd..4abb7e7775 100644 --- a/packages/js/manifests/polywrap/src/formats/polywrap/migrators/0.1.0_to_0.2.0.ts +++ b/packages/js/manifests/polywrap/src/formats/polywrap/migrators/0.1.0_to_0.2.0.ts @@ -1,7 +1,8 @@ +import { ILogger } from "@polywrap/logging-js"; import { PolywrapManifest as OldManifest } from "../0.1.0"; import { PolywrapManifest as NewManifest } from "../0.2.0"; -export function migrate(manifest: OldManifest): NewManifest { +export function migrate(manifest: OldManifest, logger?: ILogger): NewManifest { const shouldHaveExtensions = manifest.build || manifest.deploy || manifest.meta; @@ -11,6 +12,16 @@ export function migrate(manifest: OldManifest): NewManifest { meta: manifest.meta, }; + if ( + manifest.import_redirects?.some((x) => + x.schema.includes("build/schema.graphql") + ) + ) { + logger?.warn( + `Detected a reference to "build/schema.graphql" in "import_redirects". Consider using "build/wrap.info" instead of "build/schema.graphql" in "source.import_abis", schema.graphql is no longer emitted as a build artifact.` + ); + } + return { format: "0.2.0", project: { @@ -30,4 +41,4 @@ export function migrate(manifest: OldManifest): NewManifest { // eslint-disable-next-line @typescript-eslint/naming-convention __type: "PolywrapManifest", }; -}; +} diff --git a/packages/js/manifests/polywrap/src/migrations/migration.ts b/packages/js/manifests/polywrap/src/migrations/Migrator.ts similarity index 79% rename from packages/js/manifests/polywrap/src/migrations/migration.ts rename to packages/js/manifests/polywrap/src/migrations/Migrator.ts index 145ec43ff7..de9ccf6033 100644 --- a/packages/js/manifests/polywrap/src/migrations/migration.ts +++ b/packages/js/manifests/polywrap/src/migrations/Migrator.ts @@ -1,3 +1,4 @@ +import { ILogger } from "@polywrap/logging-js"; import { AnyAppManifest, AnyBuildManifest, @@ -22,5 +23,5 @@ type AnyManifest = export type Migrator = { from: string; to: string; - migrate: (manifest: AnyManifest) => AnyManifest; + migrate: (manifest: AnyManifest, logger?: ILogger) => AnyManifest; }; diff --git a/packages/js/manifests/polywrap/src/migrations/findShortestMigrationPath.ts b/packages/js/manifests/polywrap/src/migrations/findShortestMigrationPath.ts index d97580d897..5b9c908154 100644 --- a/packages/js/manifests/polywrap/src/migrations/findShortestMigrationPath.ts +++ b/packages/js/manifests/polywrap/src/migrations/findShortestMigrationPath.ts @@ -1,4 +1,4 @@ -import { Migrator } from "./migration"; +import { Migrator } from "./Migrator"; type MigrationWithSearchHistory = [Migrator, Migrator[]]; diff --git a/packages/js/manifests/polywrap/src/migrations/index.ts b/packages/js/manifests/polywrap/src/migrations/index.ts index 712bb35572..219a9e64f9 100644 --- a/packages/js/manifests/polywrap/src/migrations/index.ts +++ b/packages/js/manifests/polywrap/src/migrations/index.ts @@ -1,2 +1,2 @@ export * from "./findShortestMigrationPath"; -export * from "./migration"; +export * from "./Migrator"; diff --git a/packages/js/plugins/ethereum/README.md b/packages/js/plugins/ethereum/README.md index e65b0e664a..545dda0f0c 100644 --- a/packages/js/plugins/ethereum/README.md +++ b/packages/js/plugins/ethereum/README.md @@ -1,89 +1,74 @@ # @polywrap/ethereum-plugin-js -Ethereum Plugin allows the Polywrap JS Client to interact with the [Ethereum blockchain](https://ethereum.org/). +The Ethereum plugin wrapper allows the Polywrap JS Client to interact with any [EVM based blockchain](https://ethereum.org/). ## Usage ``` typescript import { - initTestEnvironment, - stopTestEnvironment, - buildWrapper, - ensAddresses, - providers -} from "@polywrap/test-env-js"; -import { ethereumPlugin, Connections, Connection } from "@polywrap/ethereum-plugin-js"; -import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; -import { ensPlugin } from "@polywrap/ens-plugin-js"; + ethereumPlugin, + Connections, + Connection +} from "@polywrap/ethereum-plugin-js"; -// query a wrapper with an ENS path -export async function foo({ +export async function main() { - // spin up docker containers with Ganache and IPFS. - await initTestEnvironment(); - - const ethereumPluginURI = "wrap://ens/ipfs.polywrap.eth" + const uri = "wrap://ens/ethereum.polywrap.eth" // initialize Ethereum Connections store const connections: Connections = new Connections({ networks: { - testnet: new Connection({ - provider: providers.ethereum, + mainnet: new Connection({ + provider: "..." }), + matic: new Connection({ + provider: window.ethereum + }) }, - defaultNetwork: "testnet", + defaultNetwork: "matic" }); - // initialize the client with eth, ipfs, ens plugins + // initialize the client with the ethereum plugin client = new PolywrapClient({ plugins: [ { - uri: ethereumPluginURI, - plugin: ethereumPlugin({ connections }), - }, - { - uri: "wrap://ens/ipfs.polywrap.eth", - plugin: ipfsPlugin({ - provider: providers.ipfs, - fallbackProviders: defaultIpfsProviders, - }), - }, - { - uri: "wrap://ens/ens.polywrap.eth", - plugin: ensPlugin({ - query: { - addresses: { - testnet: ensAddresses.ensAddress, - }, - }, - }), - }, - ], + uri: uri, + plugin: ethereumPlugin({ connections }) + } + ] }); - // now the client can query ethereum with the plugin URI - const signerAddressQuery = await client.invoke({ - ethereumPluginURI, + // now you can invoke the ethereum plugin by its URI + // NOTE: uses default network "matic" + const getSignerAddress = await client.invoke({ + uri, method: "getSignerAddress", }); - const response = await client.invoke({ - ethereumPluginURI, + + if (!getSignerAddress.ok) throw getSignerAddress.error; + + const address = getSignerAddress.value; + + // Get a balance from mainnet, by passing in the optional + // "connection" argument. + const getBalance = await client.invoke({ + uri, method: "getBalance", - input: { - address: signerAddressQuery.data, + args: { + address: "0x...", + connection: { + networkNameOrChainId: "mainnet" + } }, }); - // or instantiate the plugin - const plugin = ethereumPlugin({ connections }); - - // and send invocations to ethereum - const signerAddressQuery' = plugin.getSignerAddress(client) - const response' = plugin.getBalance({address: signerAddressQuery.data}, client) + if (!getBalance.ok) throw getBalance.error; - await stopTestEnvironment(); -}) + const balance = getBalance.value; + console.log("Matic Signer: ", address); + console.log("Mainnet Balance: ", balance); +} ``` For more usage examples see `src/__tests__`. diff --git a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts index 92e0820ec0..cea0bb531a 100644 --- a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts @@ -1049,6 +1049,22 @@ describe("Ethereum Plugin", () => { ); }); + it("signMessageBytes", async () => { + const encoder = new TextEncoder(); + const response = await client.invoke({ + uri, + method: "signMessageBytes", + args: { + bytes: encoder.encode("Hello World") + } + }); + + if (!response.ok) fail(response.error); + expect(response.value).toBe( + "0xa4708243bf782c6769ed04d83e7192dbcf4fc131aa54fde9d889d8633ae39dab03d7babd2392982dff6bc20177f7d887e27e50848c851320ee89c6c63d18ca761c" + ); + }); + it("sendRPC", async () => { const res = await client.invoke({ uri, diff --git a/packages/js/plugins/ethereum/src/__tests__/integration/src/index.ts b/packages/js/plugins/ethereum/src/__tests__/integration/src/index.ts index 9e7fec5f01..d9192369a5 100644 --- a/packages/js/plugins/ethereum/src/__tests__/integration/src/index.ts +++ b/packages/js/plugins/ethereum/src/__tests__/integration/src/index.ts @@ -32,6 +32,7 @@ import { Args_sendTransaction, Args_sendTransactionAndWait, Args_signMessage, + Args_signMessageBytes, Args_requestAccounts, } from "./wrap"; import { BigInt } from "@polywrap/wasm-as"; @@ -294,6 +295,15 @@ export function signMessage( }).unwrap(); } +export function signMessageBytes( + args: Args_signMessageBytes +): string { + return Ethereum_Module.signMessageBytes({ + bytes: args.bytes, + connection: args.connection + }).unwrap(); +} + export function sendRPC( args: Args_sendRPC ): string | null { diff --git a/packages/js/plugins/ethereum/src/__tests__/integration/src/schema.graphql b/packages/js/plugins/ethereum/src/__tests__/integration/src/schema.graphql index 71c62f085c..897ae98bd3 100644 --- a/packages/js/plugins/ethereum/src/__tests__/integration/src/schema.graphql +++ b/packages/js/plugins/ethereum/src/__tests__/integration/src/schema.graphql @@ -151,6 +151,11 @@ type Module { connection: Ethereum_Connection ): String! + signMessageBytes( + bytes: Bytes! + connection: Ethereum_Connection + ): String! + sendRPC( method: String! params: [String!]! diff --git a/packages/js/plugins/ethereum/src/index.ts b/packages/js/plugins/ethereum/src/index.ts index a6f95bb920..46e731521a 100644 --- a/packages/js/plugins/ethereum/src/index.ts +++ b/packages/js/plugins/ethereum/src/index.ts @@ -29,6 +29,7 @@ import { Args_sendTransaction, Args_sendTransactionAndWait, Args_signMessage, + Args_signMessageBytes, TxResponse, BigInt, StaticTxResult, @@ -397,6 +398,14 @@ export class EthereumPlugin extends Module { return await connection.getSigner().signMessage(args.message); } + public async signMessageBytes( + args: Args_signMessageBytes, + _client: CoreClient + ): Promise { + const connection = await this._getConnection(args.connection); + return await connection.getSigner().signMessage(args.bytes); + } + public async sendRPC( args: Args_sendRPC, _client: CoreClient diff --git a/packages/js/plugins/ethereum/src/schema.graphql b/packages/js/plugins/ethereum/src/schema.graphql index 82022e7886..9eef54d397 100644 --- a/packages/js/plugins/ethereum/src/schema.graphql +++ b/packages/js/plugins/ethereum/src/schema.graphql @@ -244,6 +244,11 @@ type Module { connection: Connection ): String! + signMessageBytes( + bytes: Bytes! + connection: Connection + ): String! + sendRPC( method: String! params: [String!]! diff --git a/packages/templates/wasm/interface/README.md b/packages/templates/wasm/interface/README.md index 465e65206d..817167e4e5 100644 --- a/packages/templates/wasm/interface/README.md +++ b/packages/templates/wasm/interface/README.md @@ -6,8 +6,8 @@ `nvm install && nvm use` `yarn` -## Start Test Environment -`yarn test:env:up` +## Build +`yarn build` ## Build & Deploy Polywrap `yarn deploy` \ No newline at end of file diff --git a/packages/templates/wasm/interface/polywrap.deploy.yaml b/packages/templates/wasm/interface/polywrap.deploy.yaml index 194b222de9..f0444053fc 100644 --- a/packages/templates/wasm/interface/polywrap.deploy.yaml +++ b/packages/templates/wasm/interface/polywrap.deploy.yaml @@ -3,3 +3,5 @@ stages: ipfs_deploy: package: ipfs uri: fs/./build + config: + gatewayUri: "https://ipfs.wrappers.io" \ No newline at end of file diff --git a/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts b/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts index aaf921f218..2828720aeb 100644 --- a/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts +++ b/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts @@ -1,6 +1,5 @@ import { - ClientConfigBuilder, - ClientConfig, + IClientConfigBuilder, } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { @@ -31,15 +30,13 @@ const mockPlugin = () => { return PluginPackage.from(new MockPlugin({ val: 0 }), mockPluginManifest); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ], - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage( + { + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }, + ); } export const mockPluginManifest: WrapManifest = { diff --git a/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts b/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts index 6306d59d75..be449a42a0 100644 --- a/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts +++ b/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts @@ -1,4 +1,4 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion, @@ -28,15 +28,11 @@ const mockPlugin = () => { return PluginPackage.from(new MockPlugin({ val: 0 }), mockPluginManifest); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ], - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); } export const mockPluginManifest: WrapManifest = { diff --git a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts index 0513b0a80e..6ef997bf99 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts @@ -1,4 +1,4 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; import { parseSchema } from "@polywrap/schema-parse"; @@ -37,13 +37,9 @@ const mockPlugin = () => { }); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ], - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); } diff --git a/packages/test-cases/cases/cli/run/008-custom-config/config.ts b/packages/test-cases/cases/cli/run/008-custom-config/config.ts new file mode 100644 index 0000000000..1d12fce783 --- /dev/null +++ b/packages/test-cases/cases/cli/run/008-custom-config/config.ts @@ -0,0 +1,15 @@ +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; +import path from "path"; + +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + const wrapperPath = path.join(__dirname, "..", "run-test-wrapper"); + const wrapperUri = `fs/${path.resolve(wrapperPath)}/build`; + return builder + .addRedirect("wrap://ens/test.eth", wrapperUri) + .addEnv( + wrapperUri, + { + value: 1, + } + ); +} diff --git a/packages/test-cases/cases/cli/test/008-custom-config/config.ts b/packages/test-cases/cases/cli/test/008-custom-config/config.ts index 8071702486..1d12fce783 100644 --- a/packages/test-cases/cases/cli/test/008-custom-config/config.ts +++ b/packages/test-cases/cases/cli/test/008-custom-config/config.ts @@ -1,23 +1,15 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import path from "path"; -export function getCustomConfig(): Partial> { +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { const wrapperPath = path.join(__dirname, "..", "run-test-wrapper"); const wrapperUri = `fs/${path.resolve(wrapperPath)}/build`; - return { - redirects: [ + return builder + .addRedirect("wrap://ens/test.eth", wrapperUri) + .addEnv( + wrapperUri, { - from: "wrap://ens/test.eth", - to: wrapperUri, - }, - ], - envs: [ - { - uri: wrapperUri, - env: { - value: 1, - }, - }, - ], - }; + value: 1, + } + ); } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts index d61dd5a11c..aeb80a6f01 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts @@ -1,4 +1,4 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; @@ -119,13 +119,9 @@ const mockPlugin = () => { ); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - } - ] - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json new file mode 100644 index 0000000000..aa6170b001 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json @@ -0,0 +1,3 @@ +{ + "args": ["-c", "./config.ts"] +} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts new file mode 100644 index 0000000000..4a08a4bd6a --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts @@ -0,0 +1,158 @@ +import { BaseClientConfigBuilder, getDefaultConfig, IClientConfigBuilder, CoreClientConfig, ExtendableUriResolver, LegacyRedirectsResolver, PackageToWrapperCacheResolver, RecursiveResolver, StaticResolver, Uri, WrapperCache } from "@polywrap/client-js"; +import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; +import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; + +export class CustomConfigBuilder extends BaseClientConfigBuilder { + addDefaults(): CustomConfigBuilder { + return this.add(getDefaultConfig()); + } + + buildCoreConfig(): CoreClientConfig { + return { + envs: this.config.envs, + interfaces: this.config.interfaces, + redirects: this.config.redirects, + resolver: + RecursiveResolver.from( + PackageToWrapperCacheResolver.from( + [ + new LegacyRedirectsResolver(), + StaticResolver.from([ + ...this.config.wrappers, + ...this.config.packages, + ]), + ...this.config.resolvers, + new ExtendableUriResolver(), + ], + new WrapperCache() + ) + ), + }; + } +} + +interface Config extends Record { + val: number; +} + +class MockPlugin extends PluginModule { + getData(_: unknown): number { + return this.config.val; + } + + setData(args: { value: number }) { + this.config.val = +args.value; + return true; + } + + deployContract(): string { + return "0x100"; + } +} + +const mockPlugin = () => { + return PluginPackage.from( + new MockPlugin({ val: 0 }) as PluginModule, + { + name: "mock", + type: "plugin", + version: latestWrapManifestVersion, + abi: { + objectTypes: [], + enumTypes: [], + interfaceTypes: [], + importedObjectTypes: [], + importedModuleTypes: [], + importedEnumTypes: [], + importedEnvTypes: [], + moduleType: { + type: "Module", + kind: 128, + methods: [ + { + type: "Method", + name: "getData", + required: true, + kind: 64, + arguments: [], + return: { + type: "Int", + name: "getData", + required: true, + kind: 34, + scalar: { + type: "Int", + name: "getData", + required: true, + kind: 4, + }, + }, + }, + { + type: "Method", + name: "setData", + required: true, + kind: 64, + arguments: [ + { + type: "Int", + name: "value", + required: true, + kind: 34, + scalar: { + type: "Int", + name: "value", + required: true, + kind: 4, + }, + }, + ], + return: { + type: "Boolean", + name: "setData", + required: true, + kind: 34, + scalar: { + type: "Boolean", + name: "setData", + required: true, + kind: 4, + }, + }, + }, + { + type: "Method", + name: "deployContract", + required: true, + kind: 64, + arguments: [], + return: { + type: "String", + name: "deployContract", + required: true, + kind: 34, + scalar: { + type: "String", + name: "deployContract", + required: true, + kind: 4, + }, + }, + }, + ], + imports: [], + interfaces: [], + }, + } + } + ); +}; + +export function configure(_: IClientConfigBuilder): IClientConfigBuilder { + return new CustomConfigBuilder() + .addDefaults() + .addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); +} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/output.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/output.json new file mode 100644 index 0000000000..d91a8e5545 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/output.json @@ -0,0 +1,4 @@ +[ + "wrap.wasm", + "wrap.info" +] \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/stdout.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/stdout.json new file mode 100644 index 0000000000..6cbc97b938 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/expected/stdout.json @@ -0,0 +1,7 @@ +{ + "stdout": [ + "Artifacts written to ./build", + "WRAP manifest written in ./build" + ], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/package.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/package.json new file mode 100644 index 0000000000..3360b30d0f --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/package.json @@ -0,0 +1,15 @@ +{ + "name": "@polywrap/test-project", + "version": "0.1.0", + "license": "MIT", + "private": true, + "scripts": { + "build": "polywrap build" + }, + "dependencies": { + "@polywrap/wasm-as": "0.3.0" + }, + "devDependencies": { + "assemblyscript": "0.19.23" + } +} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.build.yaml b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.build.yaml new file mode 100644 index 0000000000..28c005efc2 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.build.yaml @@ -0,0 +1,10 @@ +format: 0.2.0 +strategies: + image: + node_version: "16.13.0" + include: + - ./src + - ./package.json +linked_packages: + - name: "@polywrap/wasm-as" + path: ../../../../../../../wasm/as diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.yaml b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.yaml new file mode 100644 index 0000000000..39a72bc78f --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/polywrap.yaml @@ -0,0 +1,9 @@ +format: 0.2.0 +project: + name: test-project + type: wasm/assemblyscript +source: + module: ./src/index.ts + schema: ./src/schema.graphql +extensions: + build: ./polywrap.build.yaml diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts new file mode 100644 index 0000000000..61e8841104 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/index.ts @@ -0,0 +1,9 @@ +import { Args_deployContract, Args_method, Mock_Module } from "./wrap"; + +export function method(args: Args_method): string { + return args.arg; +} + +export function deployContract(_: Args_deployContract): string { + return Mock_Module.deployContract({}).unwrap(); +} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/schema.graphql b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/schema.graphql new file mode 100644 index 0000000000..928ed3bdb9 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/src/schema.graphql @@ -0,0 +1,9 @@ +#import * into Mock from "wrap://ens/mock.eth" + +type Module { + method( + arg: String! + ): String! + + deployContract: String! +} diff --git a/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts index db89960cfb..5a103a3b93 100644 --- a/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts @@ -1,4 +1,4 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { IWrapPackage } from "@polywrap/core-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { @@ -34,15 +34,11 @@ const mockPlugin = (): IWrapPackage => { }); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ], - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); } const abi: WrapAbi = { diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/cmd.json b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/cmd.json new file mode 100644 index 0000000000..aa6170b001 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/cmd.json @@ -0,0 +1,3 @@ +{ + "args": ["-c", "./config.ts"] +} \ No newline at end of file diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts new file mode 100644 index 0000000000..aa60c034bb --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts @@ -0,0 +1,158 @@ +import { BaseClientConfigBuilder, getDefaultConfig, IClientConfigBuilder, CoreClientConfig, ExtendableUriResolver, LegacyRedirectsResolver, PackageToWrapperCacheResolver, RecursiveResolver, StaticResolver, Uri, WrapperCache } from "@polywrap/client-js"; +import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; +import { latestWrapManifestVersion } from "@polywrap/schema-parse"; + +export class CustomConfigBuilder extends BaseClientConfigBuilder { + addDefaults(): CustomConfigBuilder { + return this.add(getDefaultConfig()); + } + + buildCoreConfig(): CoreClientConfig { + return { + envs: this.config.envs, + interfaces: this.config.interfaces, + redirects: this.config.redirects, + resolver: + RecursiveResolver.from( + PackageToWrapperCacheResolver.from( + [ + new LegacyRedirectsResolver(), + StaticResolver.from([ + ...this.config.wrappers, + ...this.config.packages, + ]), + ...this.config.resolvers, + new ExtendableUriResolver(), + ], + new WrapperCache() + ) + ), + }; + } +} + +interface Config extends Record { + val: number; +} + +class MockPlugin extends PluginModule { + getData(_: unknown): number { + return this.config.val; + } + + setData(args: { value: number }) { + this.config.val = +args.value; + return true; + } + + deployContract(): string { + return "0x100"; + } +} + +const mockPlugin = () => { + return PluginPackage.from( + new MockPlugin({ val: 0 }) as PluginModule, + { + name: "mock", + type: "plugin", + version: latestWrapManifestVersion, + abi: { + objectTypes: [], + enumTypes: [], + interfaceTypes: [], + importedObjectTypes: [], + importedModuleTypes: [], + importedEnumTypes: [], + importedEnvTypes: [], + moduleType: { + type: "Module", + kind: 128, + methods: [ + { + type: "Method", + name: "getData", + required: true, + kind: 64, + arguments: [], + return: { + type: "Int", + name: "getData", + required: true, + kind: 34, + scalar: { + type: "Int", + name: "getData", + required: true, + kind: 4, + }, + }, + }, + { + type: "Method", + name: "setData", + required: true, + kind: 64, + arguments: [ + { + type: "Int", + name: "value", + required: true, + kind: 34, + scalar: { + type: "Int", + name: "value", + required: true, + kind: 4, + }, + }, + ], + return: { + type: "Boolean", + name: "setData", + required: true, + kind: 34, + scalar: { + type: "Boolean", + name: "setData", + required: true, + kind: 4, + }, + }, + }, + { + type: "Method", + name: "deployContract", + required: true, + kind: 64, + arguments: [], + return: { + type: "String", + name: "deployContract", + required: true, + kind: 34, + scalar: { + type: "String", + name: "deployContract", + required: true, + kind: 4, + }, + }, + }, + ], + imports: [], + interfaces: [], + }, + } + } + ); +}; + +export function configure(_: IClientConfigBuilder): IClientConfigBuilder { + return new CustomConfigBuilder() + .addDefaults() + .addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); +} diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/expected/stdout.json b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/expected/stdout.json new file mode 100644 index 0000000000..3e4855fba4 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/expected/stdout.json @@ -0,0 +1,6 @@ +{ + "stdout": [ + "Types were generated successfully" + ], + "exitCode": 0 +} diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/package.json b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/package.json new file mode 100644 index 0000000000..3360b30d0f --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/package.json @@ -0,0 +1,15 @@ +{ + "name": "@polywrap/test-project", + "version": "0.1.0", + "license": "MIT", + "private": true, + "scripts": { + "build": "polywrap build" + }, + "dependencies": { + "@polywrap/wasm-as": "0.3.0" + }, + "devDependencies": { + "assemblyscript": "0.19.23" + } +} diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.build.yaml b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.build.yaml new file mode 100644 index 0000000000..42190a0512 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.build.yaml @@ -0,0 +1,10 @@ +format: 0.2.0 +strategies: + image: + node_version: "14.16.0" + include: + - ./src + - ./package.json +linked_packages: + - name: "@polywrap/wasm-as" + path: ../../../../../../wasm/as diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.yaml b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.yaml new file mode 100644 index 0000000000..cd0a6788b7 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/polywrap.yaml @@ -0,0 +1,9 @@ +format: 0.2.0 +project: + name: test-project + type: wasm/assemblyscript +source: + schema: ./schema.graphql + module: ./src/index.ts +extensions: + build: ./polywrap.build.yaml diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/schema.graphql b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/schema.graphql new file mode 100644 index 0000000000..928ed3bdb9 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/schema.graphql @@ -0,0 +1,9 @@ +#import * into Mock from "wrap://ens/mock.eth" + +type Module { + method( + arg: String! + ): String! + + deployContract: String! +} diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/src/index.ts b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/src/index.ts new file mode 100644 index 0000000000..2c9e567878 --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/src/index.ts @@ -0,0 +1,9 @@ +import { Args_method, Mock_deployContract } from "./wrap"; + +export function method(args: Args_method): string { + return args.arg; +} + +export function deployContract(): string { + return Mock_deployContract({}).unwrap(); +} \ No newline at end of file diff --git a/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/schema.graphql b/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/schema.graphql index ba0c21a963..8957a0cbda 100644 --- a/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/schema.graphql +++ b/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/schema.graphql @@ -1,5 +1,5 @@ #import * into Add from "ens/add.eth" type Module { - add(a: Int!, b: Int!): Int! + addAndIncrement(a: Int!, b: Int!): Int! } diff --git a/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/src/index.ts b/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/src/index.ts index e6cff992f2..13afa78f83 100644 --- a/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/src/index.ts +++ b/packages/test-cases/cases/wrappers/wasm-as/simple-subinvoke/invoke/src/index.ts @@ -1,10 +1,10 @@ -import { Args_add, Add_Module } from "./wrap"; +import { Args_addAndIncrement, Add_Module } from "./wrap"; import { Args_add as ImportedArgs_add } from "./wrap/imported/Add_Module/serialization"; -export function add(args: Args_add): i32 { +export function addAndIncrement(args: Args_addAndIncrement): i32 { let importedArgs: ImportedArgs_add = { a: args.a, b: args.b } - return Add_Module.add(importedArgs).unwrap() + return Add_Module.add(importedArgs).unwrap() + 1 } diff --git a/yarn.lock b/yarn.lock index bed5bda47a..a5d7266a2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -124,10 +124,10 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3", "@babel/compat-data@^7.19.4", "@babel/compat-data@^7.9.0": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.4.tgz#95c86de137bf0317f3a570e1b6e996b427299747" - integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.4", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.9.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.0.tgz#9b61938c5f688212c7b9ae363a819df7d29d4093" + integrity sha512-Gt9jszFJYq7qzXVK4slhc6NzJXnOVmRECWcVjF/T23rNXD9NtWQ0W3qxdg+p9wWIB+VQw3GYV/U2Ha9bRTfs4w== "@babel/core@7.9.0": version "7.9.0" @@ -172,12 +172,12 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.19.6", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.6.tgz#9e481a3fe9ca6261c972645ae3904ec0f9b34a1d" - integrity sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA== +"@babel/generator@^7.19.6", "@babel/generator@^7.20.0", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.0.tgz#0bfc5379e0efb05ca6092091261fcdf7ec36249d" + integrity sha512-GUPcXxWibClgmYJuIwC2Bc2Lg+8b9VjaJ+HlNdACEVt+Wlr1eoU1OPZjZRm7Hzl0gaTsUZNQfeihvZJhG7oc3w== dependencies: - "@babel/types" "^7.19.4" + "@babel/types" "^7.20.0" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -197,11 +197,11 @@ "@babel/types" "^7.18.9" "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3", "@babel/helper-compilation-targets@^7.8.7": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" - integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" + integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== dependencies: - "@babel/compat-data" "^7.19.3" + "@babel/compat-data" "^7.20.0" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.21.3" semver "^6.3.0" @@ -335,11 +335,11 @@ "@babel/types" "^7.19.4" "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -374,13 +374,13 @@ "@babel/types" "^7.19.0" "@babel/helpers@^7.19.4", "@babel/helpers@^7.9.0": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.4.tgz#42154945f87b8148df7203a25c31ba9a73be46c5" - integrity sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.0.tgz#27c8ffa8cc32a2ed3762fba48886e7654dbcf77f" + integrity sha512-aGMjYraN0zosCEthoGLdqot1oRsmxVTQRHadsUPz5QM44Zej2PYRz7XiDE7GqnkZnNtLbOuxqoZw42vkU7+XEQ== dependencies: "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.4" - "@babel/types" "^7.19.4" + "@babel/traverse" "^7.20.0" + "@babel/types" "^7.20.0" "@babel/highlight@^7.18.6", "@babel/highlight@^7.8.3": version "7.18.6" @@ -391,10 +391,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" - integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.20.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.0.tgz#b26133c888da4d79b0d3edcf42677bcadc783046" + integrity sha512-G9VgAhEaICnz8iiJeGJQyVl6J2nTjbW0xeisva0PK6XcKsga7BIaqm4ZF8Rg1Wbaqmy6znspNqhPaPkyukujzg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -639,11 +639,11 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -722,12 +722,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-transform-arrow-functions@^7.18.6", "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.18.6" @@ -753,9 +753,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.19.4", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz#315d70f68ce64426db379a3d830e7ac30be02e9b" - integrity sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.0.tgz#91fe5e6ffc9ba13cb6c95ed7f0b1204f68c988c5" + integrity sha512-sXOohbpHZSk7GjxK9b3dKB7CfqUD5DwOH+DggKzOQ7TXYP+RCSbRykfjQmn/zq+rBjycVRtLf9pYhAaEJA786w== dependencies: "@babel/helper-plugin-utils" "^7.19.0" @@ -782,9 +782,9 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-destructuring@^7.19.4", "@babel/plugin-transform-destructuring@^7.8.3": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz#46890722687b9b89e1369ad0bd8dc6c5a3b4319d" - integrity sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.0.tgz#712829ef4825d9cc04bb379de316f981e9a6f648" + integrity sha512-1dIhvZfkDVx/zn2S1aFwlruspTt4189j7fEkH0Y0VyuDM6bQt7bD6kLcz3l4IlLG+e5OReaBz9ROAbttRtUHqA== dependencies: "@babel/helper-plugin-utils" "^7.19.0" @@ -1044,13 +1044,13 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.9.0": - version "7.19.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz#4f1db1e0fe278b42ddbc19ec2f6cd2f8262e35d6" - integrity sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.0.tgz#2c7ec62b8bfc21482f3748789ba294a46a375169" + integrity sha512-xOAsAFaun3t9hCwZ13Qe7gq423UgMZ6zAgmLxeGGapFqlT/X3L5qT2btjiVLlFn7gWtMaVyceS5VxGAuKbgizw== dependencies: "@babel/helper-create-class-features-plugin" "^7.19.0" "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.20.0" "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" @@ -1258,12 +1258,12 @@ "@babel/plugin-transform-typescript" "^7.9.0" "@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.12.1": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.6.tgz#778471a71d915cf3b955a9201bebabfe924f872a" - integrity sha512-oWNn1ZlGde7b4i/3tnixpH9qI0bOAACiUs+KEES4UUCnsPjVWFlWdLV/iwJuPC2qp3EowbAqsm+0XqNwnwYhxA== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.0.tgz#56ef7af3cd23d1570969809a5a8782e774e0141a" + integrity sha512-v1JH7PeAAGBEyTQM9TqojVl+b20zXtesFKCJHu50xMxZKD1fX0TKaKHPsZfFkXfs7D1M9M6Eeqg1FkJ3a0x2dA== dependencies: core-js-pure "^3.25.1" - regenerator-runtime "^0.13.4" + regenerator-runtime "^0.13.10" "@babel/runtime@7.9.0": version "7.9.0" @@ -1273,11 +1273,11 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" - integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.0.tgz#824a9ef325ffde6f78056059db3168c08785e24a" + integrity sha512-NDYdls71fTXoU8TZHfbBWg7DiZfNzClcKui/+kyi6ppD2L1qnWW3VV6CjtaBXSUGGhiTWJ6ereOIkUvenif66Q== dependencies: - regenerator-runtime "^0.13.4" + regenerator-runtime "^0.13.10" "@babel/template@^7.18.10", "@babel/template@^7.3.3", "@babel/template@^7.4.0", "@babel/template@^7.8.6": version "7.18.10" @@ -1288,26 +1288,26 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.4", "@babel/traverse@^7.19.6", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.6.tgz#7b4c865611df6d99cb131eec2e8ac71656a490dc" - integrity sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.6", "@babel/traverse@^7.20.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.0.tgz#538c4c6ce6255f5666eba02252a7b59fc2d5ed98" + integrity sha512-5+cAXQNARgjRUK0JWu2UBwja4JLSO/rBMPJzpsKb+oBF5xlUuCfljQepS4XypBQoiigL0VQjTZy6WiONtUdScQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.6" + "@babel/generator" "^7.20.0" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.6" - "@babel/types" "^7.19.4" + "@babel/parser" "^7.20.0" + "@babel/types" "^7.20.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" - integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.20.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.0.tgz#52c94cf8a7e24e89d2a194c25c35b17a64871479" + integrity sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -3300,9 +3300,9 @@ querystring "^0.2.0" "@sinclair/typebox@^0.24.1": - version "0.24.47" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.47.tgz#530b67163714356f93e82bdb871e7db4b7bc564e" - integrity sha512-J4Xw0xYK4h7eC34MNOPQi6IkNxGRck6n4VJpWDzXIFVTW8I/D43Gf+NfWz/v/7NHlzWOPd3+T4PJ4OqklQ2u7A== + version "0.24.51" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": version "1.8.3" @@ -3655,9 +3655,9 @@ integrity sha512-wH6Tu9mbiOt0n5EvdoWy0VGQaJMHfLIxY/6wS0xLC7CV1taM6gESEzcYy0ZlWvxxiiljYvfDIvz4hHbUUDRlhw== "@types/node@*": - version "18.11.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.3.tgz#78a6d7ec962b596fc2d2ec102c4dd3ef073fea6a" - integrity sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A== + version "18.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.7.tgz#8ccef136f240770c1379d50100796a6952f01f94" + integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ== "@types/node@12.12.26": version "12.12.26" @@ -4162,9 +4162,9 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== add-stream@^1.0.0: version "1.0.0" @@ -5496,9 +5496,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400: - version "1.0.30001423" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz#57176d460aa8cd85ee1a72016b961eb9aca55d91" - integrity sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ== + version "1.0.30001426" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz#58da20446ccd0cb1dfebd11d2350c907ee7c2eaa" + integrity sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A== capture-exit@^2.0.0: version "2.0.0" @@ -6194,16 +6194,16 @@ copyfiles@2.4.1: yargs "^16.1.0" core-js-compat@^3.25.1, core-js-compat@^3.6.2: - version "3.25.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.5.tgz#0016e8158c904f7b059486639e6e82116eafa7d9" - integrity sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA== + version "3.26.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.0.tgz#94e2cf8ba3e63800c4956ea298a6473bc9d62b44" + integrity sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A== dependencies: browserslist "^4.21.4" core-js-pure@^3.25.1: - version "3.25.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.5.tgz#79716ba54240c6aa9ceba6eee08cf79471ba184d" - integrity sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg== + version "3.26.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.0.tgz#7ad8a5dd7d910756f3124374b50026e23265ca9a" + integrity sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA== core-js@^2.4.0: version "2.6.12" @@ -6211,9 +6211,9 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.5.0: - version "3.25.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.5.tgz#e86f651a2ca8a0237a5f064c2fe56cef89646e27" - integrity sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw== + version "3.26.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.0.tgz#a516db0ed0811be10eac5d94f3b8463d03faccfe" + integrity sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw== core-util-is@1.0.2: version "1.0.2" @@ -14416,9 +14416,9 @@ promise-retry@^2.0.1: retry "^0.12.0" promise@^8.0.3: - version "8.2.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.2.0.tgz#a1f6280ab67457fbfc8aad2b198c9497e9e5c806" - integrity sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -15090,7 +15090,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: version "0.13.10" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== @@ -16988,9 +16988,9 @@ typescript@^4.0: integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== uglify-js@^3.1.4: - version "3.17.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.3.tgz#f0feedf019c4510f164099e8d7e72ff2d7304377" - integrity sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg== + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== uid-number@0.0.6: version "0.0.6" From 14bb81757a62cf782cd86d5a4cb4f20d0a53b5f8 Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 16:22:50 +0100 Subject: [PATCH 08/29] fix custom config test --- .../plugin/build-cmd/005-custom-config/config.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts index 0513b0a80e..6ef997bf99 100644 --- a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts @@ -1,4 +1,4 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; import { parseSchema } from "@polywrap/schema-parse"; @@ -37,13 +37,9 @@ const mockPlugin = () => { }); }; -export function getCustomConfig(): Partial> { - return { - packages: [ - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ], - }; +export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + uri: "wrap://ens/mock.eth", + package: mockPlugin(), + }); } From 8ca24634bb86fe60f494dbb598580db4d1ecacf2 Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 18:31:52 +0100 Subject: [PATCH 09/29] Add codegen to wasm build test case --- .../wasm/build-cmd/assemblyscript/014-override-config/cmd.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json index aa6170b001..0ec1626f84 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/cmd.json @@ -1,3 +1,3 @@ { - "args": ["-c", "./config.ts"] + "args": ["-c", "./config.ts", "--codegen"] } \ No newline at end of file From a9ea67ae9e5809a5e59f92e383fe894c378f231e Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 21:58:22 +0100 Subject: [PATCH 10/29] test-env buildWrapper needs to manually codegen, add `--codegen-dir` option to build command for when --codegen option is specified --- packages/cli/lang/en.json | 1 + packages/cli/lang/es.json | 1 + .../cli/src/__tests__/e2e/build.wasm.spec.ts | 2 + packages/cli/src/commands/build.ts | 28 ++++++-- packages/cli/src/commands/codegen.ts | 3 +- .../cli/src/lib/defaults/defaultCodegenDir.ts | 1 + .../{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/test-env/src/index.ts | 14 ++++ .../assemblyscript/001-sanity/yarn.lock | 70 +++++++++++++++++++ 9 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 packages/cli/src/lib/defaults/defaultCodegenDir.ts rename packages/js/plugins/ethereum/{polywrap.plugin.yaml => polywrap.yaml} (100%) create mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index 409a80f94d..2d2e2e794c 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -17,6 +17,7 @@ "commands_build_options_options": "options", "commands_build_options_t": "Use the development server's ENS instance", "commands_build_options_codegen": "Perform code generation before build", + "commands_build_options_codegen_dir": "Codegen output directory (default: {default})", "commands_build_options_w": "Automatically rebuild when changes are made (default: false)", "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index 409a80f94d..2d2e2e794c 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -17,6 +17,7 @@ "commands_build_options_options": "options", "commands_build_options_t": "Use the development server's ENS instance", "commands_build_options_codegen": "Perform code generation before build", + "commands_build_options_codegen_dir": "Codegen output directory (default: {default})", "commands_build_options_w": "Automatically rebuild when changes are made (default: false)", "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", diff --git a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts index e2269e5679..d6466d7a1c 100644 --- a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts +++ b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts @@ -19,6 +19,8 @@ Options: -c, --client-config Add custom configuration to the PolywrapClient --codegen Perform code generation before build + --codegen-dir Codegen output directory (default: + ./src/wrap) -s, --strategy Strategy to use for building the wrapper (default: "vm") -w, --watch Automatically rebuild when changes are diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 0f67605eaa..68f66ce546 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -35,6 +35,7 @@ import readline from "readline"; import { PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; +import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; const defaultOutputDir = "./build"; const defaultStrategy = SupportedStrategies.VM; @@ -51,7 +52,8 @@ type BuildCommandOptions = { manifestFile: string; outputDir: string; configBuilder: IClientConfigBuilder; - codegen: boolean; // defaults to true + codegen: boolean; // defaults to false + codegenDir: string; watch?: boolean; strategy: SupportedStrategies; verbose?: boolean; @@ -82,6 +84,12 @@ export const build: Command = { `${intlMsg.commands_common_options_config()}` ) .option(`--codegen`, `${intlMsg.commands_build_options_codegen()}`) + .option( + `--codegen-dir`, + `${intlMsg.commands_build_options_codegen_dir({ + default: defaultCodegenDir, + })}` + ) .option( `-s, --strategy <${strategyStr}>`, `${intlMsg.commands_build_options_s()}`, @@ -103,6 +111,7 @@ export const build: Command = { ), configBuilder: await parseClientConfigOption(options.clientConfig), outputDir: parseDirOption(options.outputDir, defaultOutputDir), + codegenDir: parseDirOption(options.codegenDir, defaultCodegenDir), strategy: options.strategy, logFile: parseLogFileOption(options.logFile), }); @@ -153,6 +162,7 @@ async function run(options: BuildCommandOptions) { configBuilder, strategy, codegen, + codegenDir, verbose, quiet, logFile, @@ -193,8 +203,12 @@ async function run(options: BuildCommandOptions) { }); if (codegen) { - const codeGenerator = new CodeGenerator({ project, schemaComposer }); - await codeGenerator?.generate(); + const codeGenerator = new CodeGenerator({ + project, + schemaComposer, + codegenDirAbs: codegenDir, + }); + await codeGenerator.generate(); } const compiler = new Compiler({ @@ -224,8 +238,12 @@ async function run(options: BuildCommandOptions) { try { if (codegen) { - const codeGenerator = new CodeGenerator({ project, schemaComposer }); - await codeGenerator?.generate(); + const codeGenerator = new CodeGenerator({ + project, + schemaComposer, + codegenDirAbs: codegenDir, + }); + await codeGenerator.generate(); } if (!fs.existsSync(outputDir)) { diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 78ee3d28d2..369819edac 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -18,8 +18,7 @@ import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; import { PolywrapClient } from "@polywrap/client-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; - -const defaultCodegenDir = "./src/wrap"; +import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; const pathStr = intlMsg.commands_codegen_options_o_path(); const defaultManifestStr = defaultPolywrapManifest.join(" | "); diff --git a/packages/cli/src/lib/defaults/defaultCodegenDir.ts b/packages/cli/src/lib/defaults/defaultCodegenDir.ts new file mode 100644 index 0000000000..dbfebe3455 --- /dev/null +++ b/packages/cli/src/lib/defaults/defaultCodegenDir.ts @@ -0,0 +1 @@ +export const defaultCodegenDir = "./src/wrap"; \ No newline at end of file diff --git a/packages/js/plugins/ethereum/polywrap.plugin.yaml b/packages/js/plugins/ethereum/polywrap.yaml similarity index 100% rename from packages/js/plugins/ethereum/polywrap.plugin.yaml rename to packages/js/plugins/ethereum/polywrap.yaml diff --git a/packages/js/test-env/src/index.ts b/packages/js/test-env/src/index.ts index 1ca2f6a320..48dea38b62 100644 --- a/packages/js/test-env/src/index.ts +++ b/packages/js/test-env/src/index.ts @@ -208,6 +208,20 @@ export async function buildWrapper( const manifestPath = manifestPathOverride ? path.join(wrapperAbsPath, manifestPathOverride) : `${wrapperAbsPath}/polywrap.yaml`; + + const { + exitCode: codegenExitCode, + stdout: codegenStdout, + stderr: codegenStderr, + } = await runCLI({ args: ["codegen"], cwd: wrapperAbsPath }); + + if (codegenExitCode != 0) { + console.error(`polywrap exited with code: ${codegenExitCode}`); + console.log(`stderr:\n${codegenStdout}`); + console.log(`stdout:\n${codegenStderr}`); + throw Error("polywrap CLI failed"); + } + const { exitCode: buildExitCode, stdout: buildStdout, diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock new file mode 100644 index 0000000000..d01958756b --- /dev/null +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock @@ -0,0 +1,70 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@polywrap/wasm-as@../../../../../../../wasm/as": + version "0.9.3" + dependencies: + "@web3api/assemblyscript-json" "1.2.0" + as-bigint "0.5.3" + as-bignumber "0.2.1" + as-container "0.6.1" + +"@web3api/assemblyscript-json@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@web3api/assemblyscript-json/-/assemblyscript-json-1.2.0.tgz#f01f11f12a66cd1a319d43f12e476307d1ad3da8" + integrity sha512-x+wchJpH1giJzXj3dYs8vh2SKMXepeqVXiaFV/YCtXg4X/KaUnxi0kp5JugbEAyEJurEScH1YuV6IvGhGui/fw== + +as-bigint@0.5.3, as-bigint@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/as-bigint/-/as-bigint-0.5.3.tgz#a0647d0b7ce835077aca33115e71eb26a83df8be" + integrity sha512-tg9iTO/vPeovOM5CSk1WxYcsfBd/cd3twhBW5PrpcGUfiSEXlPB69eOxFKvSbZnpuDxBAyQ4YBgEkfnYL89Czw== + +as-bignumber@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/as-bignumber/-/as-bignumber-0.2.1.tgz#6479caca7f24f784b10b3d2633cde457ef9cbc22" + integrity sha512-udKOlFYKSZyuHK7upTczRR8lcXkyPS0DR6NOtP+c3bhM4B2B0VqMBTzqa0hdYG4Zss94zA6UmqpjreEbzNUo4g== + dependencies: + as-bigint "^0.5.1" + +as-container@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/as-container/-/as-container-0.6.1.tgz#94806a91e96b68622c55f301fc04e6339a1228c2" + integrity sha512-cgQ7P/dQAGeU2lLhPpinThYfFcUw3HzV8b00CoqV+l5Tsgpl7xhXdoc/2srCyK0um1BVAQwlrEpNTtthzkMF+g== + +assemblyscript@0.19.23: + version "0.19.23" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" + integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== + dependencies: + binaryen "102.0.0-nightly.20211028" + long "^5.2.0" + source-map-support "^0.5.20" + +binaryen@102.0.0-nightly.20211028: + version "102.0.0-nightly.20211028" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" + integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +long@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" + integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A== + +source-map-support@^0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== From 5dc62ed7df02e175b3ed2040706293c581878e2b Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 21:59:18 +0100 Subject: [PATCH 11/29] chore: lint --- packages/cli/src/commands/build.ts | 2 +- packages/cli/src/commands/codegen.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 68f66ce546..030939cafd 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -28,6 +28,7 @@ import { DockerImageBuildStrategy, LocalBuildStrategy, } from "../lib/build-strategies"; +import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; import fs from "fs"; import path from "path"; @@ -35,7 +36,6 @@ import readline from "readline"; import { PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; const defaultOutputDir = "./build"; const defaultStrategy = SupportedStrategies.VM; diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 369819edac..d93b62ade7 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -15,10 +15,10 @@ import { parseLogFileOption, } from "../lib"; import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; +import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; import { PolywrapClient } from "@polywrap/client-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; const pathStr = intlMsg.commands_codegen_options_o_path(); const defaultManifestStr = defaultPolywrapManifest.join(" | "); From 2d6b18500271eec56182eafbcbbdcd52ab23250e Mon Sep 17 00:00:00 2001 From: Pileks Date: Thu, 3 Nov 2022 21:59:28 +0100 Subject: [PATCH 12/29] chore: lint --- packages/cli/src/lib/defaults/defaultCodegenDir.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/lib/defaults/defaultCodegenDir.ts b/packages/cli/src/lib/defaults/defaultCodegenDir.ts index dbfebe3455..585f99a287 100644 --- a/packages/cli/src/lib/defaults/defaultCodegenDir.ts +++ b/packages/cli/src/lib/defaults/defaultCodegenDir.ts @@ -1 +1 @@ -export const defaultCodegenDir = "./src/wrap"; \ No newline at end of file +export const defaultCodegenDir = "./src/wrap"; From 0451bb80ef18e580b2e3fb4fade6c46a3c861816 Mon Sep 17 00:00:00 2001 From: Pileks Date: Fri, 4 Nov 2022 15:05:55 +0100 Subject: [PATCH 13/29] Add codegen option to test-env buildWrapper function, properly exit execution when codegen option of CLI build command fails --- packages/cli/src/__tests__/e2e/test.spec.ts | 2 +- .../cli/src/__tests__/unit/jobrunner.spec.ts | 9 ++-- packages/cli/src/commands/build.ts | 14 +++++- .../uri-resolution/uri-resolution.spec.ts | 6 +-- .../src/__tests__/core/wasm-wrapper.spec.ts | 4 +- .../client/src/__tests__/e2e/wasm-as.spec.ts | 46 +++++++++---------- .../client/src/__tests__/e2e/wasm-rs.spec.ts | 41 +++++++++-------- .../ethereum/src/__tests__/e2e.spec.ts | 2 +- .../src/__tests__/e2e/integration.spec.ts | 2 +- .../uri-resolvers/ens-resolver/README.md | 1 + .../ens-resolver/src/__tests__/e2e.spec.ts | 1 + .../src/__tests__/e2e.spec.ts | 2 +- .../uri-resolvers/http-resolver/README.md | 1 + .../http-resolver/src/__tests__/e2e.spec.ts | 3 +- .../uri-resolvers/ipfs-resolver/README.md | 1 + .../ipfs-resolver/src/__tests__/e2e.spec.ts | 1 + .../ws/src/__tests__/e2e/integration.spec.ts | 2 +- .../react/src/__tests__/integration.spec.tsx | 1 + .../src/__tests__/usePolywrapInvoke.spec.tsx | 2 +- .../src/__tests__/usePolywrapQuery.spec.tsx | 4 +- packages/js/test-env/README.md | 4 +- packages/js/test-env/src/index.ts | 38 +++++++++------ .../__tests__/in-memory-file-reader.spec.ts | 2 +- .../src/__tests__/in-memory-packages.spec.ts | 2 +- .../src/__tests__/in-memory-wrappers.spec.ts | 2 +- 25 files changed, 110 insertions(+), 83 deletions(-) diff --git a/packages/cli/src/__tests__/e2e/test.spec.ts b/packages/cli/src/__tests__/e2e/test.spec.ts index 58404d54bc..4da6f39315 100644 --- a/packages/cli/src/__tests__/e2e/test.spec.ts +++ b/packages/cli/src/__tests__/e2e/test.spec.ts @@ -51,7 +51,7 @@ describe("e2e tests for test command", () => { beforeAll(async () => { const wrapperPath = path.join(testCaseRoot, "run-test-wrapper"); - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); }); it("Should show help text", async () => { diff --git a/packages/cli/src/__tests__/unit/jobrunner.spec.ts b/packages/cli/src/__tests__/unit/jobrunner.spec.ts index c1bf8059af..82257fba69 100644 --- a/packages/cli/src/__tests__/unit/jobrunner.spec.ts +++ b/packages/cli/src/__tests__/unit/jobrunner.spec.ts @@ -13,7 +13,9 @@ describe("workflow JobRunner", () => { beforeAll(async () => { await buildWrapper( - path.join(GetPathToTestWrappers(), "wasm-as", "simple-calculator") + path.join(GetPathToTestWrappers(), "wasm-as", "simple-calculator"), + undefined, + true ); configBuilder = new ClientConfigBuilder().addDefaults(); }); @@ -21,10 +23,7 @@ describe("workflow JobRunner", () => { for (const testCase of testCases) { it(testCase.name, async () => { const ids = Object.keys(testCase.workflow.jobs); - const jobRunner = new JobRunner( - configBuilder, - testCase.onExecution - ); + const jobRunner = new JobRunner(configBuilder, testCase.onExecution); await jobRunner.run(testCase.workflow.jobs, ids); }); } diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 030939cafd..fc08842a0c 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -208,7 +208,12 @@ async function run(options: BuildCommandOptions) { schemaComposer, codegenDirAbs: codegenDir, }); - await codeGenerator.generate(); + const codegenSuccess = await codeGenerator.generate(); + + if (!codegenSuccess) { + logger.error("Codegen failed before build!"); + return false; + } } const compiler = new Compiler({ @@ -243,7 +248,12 @@ async function run(options: BuildCommandOptions) { schemaComposer, codegenDirAbs: codegenDir, }); - await codeGenerator.generate(); + const codegenSuccess = await codeGenerator.generate(); + + if (!codegenSuccess) { + logger.error("Codegen failed before build!"); + return false; + } } if (!fs.existsSync(outputDir)) { diff --git a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts index 40ecb6a404..bbf0a40b47 100644 --- a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts +++ b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts @@ -107,9 +107,9 @@ function replaceAll(str: string, strToReplace: string, replaceStr: string) { describe("URI resolution", () => { beforeAll(async () => { - await buildWrapper(wrapperPath); - await buildWrapper(simpleFsResolverWrapperPath); - await buildWrapper(simpleRedirectResolverWrapperPath); + await buildWrapper(wrapperPath, undefined, true); + await buildWrapper(simpleFsResolverWrapperPath, undefined, true); + await buildWrapper(simpleRedirectResolverWrapperPath, undefined, true); }); it("sanity", async () => { diff --git a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts index faeefb88ac..06bae6e810 100644 --- a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -23,8 +23,8 @@ const simpleMemoryWrapperUri = new Uri(`fs/${simpleMemoryWrapperPath}/build`); describe("wasm-wrapper", () => { beforeAll(async () => { - await buildWrapper(simpleWrapperPath); - await buildWrapper(simpleMemoryWrapperPath); + await buildWrapper(simpleWrapperPath, undefined, true); + await buildWrapper(simpleMemoryWrapperPath, undefined, true); }); const mockPlugin = (): IWrapPackage => { diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index f650f4fc92..a7d4419a71 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -25,7 +25,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/asyncify`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); const client = new PolywrapClient({ packages: [ @@ -46,8 +46,8 @@ describe("wasm-as test cases", () => { const subwrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple-subinvoke/subinvoke`; const subwrapperUri = `fs/${subwrapperPath}/build`; - await buildWrapper(subwrapperPath); - await buildWrapper(wrapperPath); + await buildWrapper(subwrapperPath, undefined, true); + await buildWrapper(wrapperPath, undefined, true); const client = new PolywrapClient({ redirects: [ @@ -65,7 +65,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/bigint-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBigIntTypeTest(new PolywrapClient(), wrapperUri); }); @@ -74,7 +74,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/bignumber-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBigNumberTypeTest(new PolywrapClient(), wrapperUri); }); @@ -83,7 +83,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/bytes-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBytesTypeTest(new PolywrapClient(), wrapperUri); }); @@ -92,7 +92,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/enum-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runEnumTypesTest(new PolywrapClient(), wrapperUri); }); @@ -101,7 +101,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/map-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runMapTypeTest(new PolywrapClient(), wrapperUri); }); @@ -112,7 +112,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/reserved-words`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); const ensUri = wrapperUri; const result = await client.invoke({ @@ -140,7 +140,7 @@ describe("wasm-as test cases", () => { const implementationUri = `wrap://fs/${implementationPath}/build`; await buildWrapper(interfacePath); - await buildWrapper(implementationPath); + await buildWrapper(implementationPath, undefined, true); const client = new PolywrapClient({ interfaces: [ @@ -169,8 +169,8 @@ describe("wasm-as test cases", () => { const aggregatorUri = `fs/${aggregatorPath}/build`; await buildWrapper(interfacePath); - await buildWrapper(implementationPath); - await buildWrapper(aggregatorPath); + await buildWrapper(implementationPath, undefined, true); + await buildWrapper(aggregatorPath, undefined, true); const client = new PolywrapClient({ interfaces: [ @@ -201,7 +201,7 @@ describe("wasm-as test cases", () => { cwd: `${GetPathToTestWrappers()}/wasm-as/interface-invoke/test-interface`, }); - await buildWrapper(implementationPath); + await buildWrapper(implementationPath, undefined, true); const client = new PolywrapClient({ interfaces: [ @@ -215,7 +215,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/interface-invoke/test-wrapper`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); const result = await client.invoke({ uri: wrapperUri, @@ -240,7 +240,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/invalid-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runInvalidTypesTest(new PolywrapClient(), wrapperUri); }); @@ -249,7 +249,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/json-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runJsonTypeTest(new PolywrapClient(), wrapperUri); }); @@ -258,7 +258,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/large-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runLargeTypesTest(new PolywrapClient(), wrapperUri); }); @@ -267,7 +267,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/number-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runNumberTypesTest(new PolywrapClient(), wrapperUri); }); @@ -276,7 +276,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/object-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runObjectTypesTest(new PolywrapClient(), wrapperUri); }); @@ -285,7 +285,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple-storage`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runSimpleStorageTest(getClientWithEnsAndIpfs(), wrapperUri); }); @@ -294,7 +294,7 @@ describe("wasm-as test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple-env-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runSimpleEnvTest( new PolywrapClient({ @@ -319,8 +319,8 @@ describe("wasm-as test cases", () => { const wrapperUri = `fs/${wrapperPath}/build`; const externalWrapperUri = `fs/${externalWrapperPath}/build`; - await buildWrapper(externalWrapperPath); - await buildWrapper(wrapperPath); + await buildWrapper(externalWrapperPath, undefined, true); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runComplexEnvs( new PolywrapClient({ diff --git a/packages/js/client/src/__tests__/e2e/wasm-rs.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-rs.spec.ts index 61660e122f..1f2f62c8f9 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-rs.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-rs.spec.ts @@ -28,7 +28,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/asyncify`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); const client = new PolywrapClient({ packages: [ @@ -46,7 +46,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/bigint-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBigIntTypeTest(new PolywrapClient(), wrapperUri); }); @@ -55,7 +55,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/bignumber-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBigNumberTypeTest(new PolywrapClient(), wrapperUri); }); @@ -64,7 +64,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/bytes-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runBytesTypeTest(new PolywrapClient(), wrapperUri); }); @@ -73,7 +73,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/enum-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runEnumTypesTest(new PolywrapClient(), wrapperUri); }); @@ -82,7 +82,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/map-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runMapTypeTest(new PolywrapClient(), wrapperUri); }); @@ -96,7 +96,7 @@ describe("wasm-rs test cases", () => { await buildWrapper(interfacePath); - await buildWrapper(implementationPath); + await buildWrapper(implementationPath, undefined, true); const client = new PolywrapClient({ interfaces: [ @@ -125,8 +125,8 @@ describe("wasm-rs test cases", () => { const aggregatorUri = `fs/${aggregatorPath}/build`; await buildWrapper(interfacePath); - await buildWrapper(implementationPath); - await buildWrapper(aggregatorPath); + await buildWrapper(implementationPath, undefined, true); + await buildWrapper(aggregatorPath, undefined, true); const client = new PolywrapClient({ interfaces: [ @@ -149,7 +149,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/invalid-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runInvalidTypesTest(new PolywrapClient(), wrapperUri); }); @@ -158,7 +158,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/json-type`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runJsonTypeTest(new PolywrapClient(), wrapperUri, true); }); @@ -167,7 +167,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/large-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runLargeTypesTest(new PolywrapClient(), wrapperUri); }); @@ -176,7 +176,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/number-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runNumberTypesTest(new PolywrapClient(), wrapperUri); }); @@ -185,7 +185,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/object-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runObjectTypesTest(new PolywrapClient(), wrapperUri); }); @@ -194,7 +194,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/simple-storage`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runSimpleStorageTest(getClientWithEnsAndIpfs(), wrapperUri); }); @@ -203,7 +203,7 @@ describe("wasm-rs test cases", () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/simple-env-types`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runSimpleEnvTest( await new PolywrapClient({ @@ -228,8 +228,8 @@ describe("wasm-rs test cases", () => { const wrapperUri = `fs/${wrapperPath}/build`; const externalWrapperUri = `fs/${externalWrapperPath}/build`; - await buildWrapper(externalWrapperPath); - await buildWrapper(wrapperPath); + await buildWrapper(externalWrapperPath, undefined, true); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runComplexEnvs( new PolywrapClient({ @@ -270,7 +270,7 @@ describe("wasm-rs test cases", () => { it("override rust print macros", async () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-rs/println-logging`; const wrapperUri = `fs/${wrapperPath}/build`; - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); console.debug = jest.fn(); const message = "foo bar baz"; @@ -324,7 +324,8 @@ describe.skip("Wasm-rs benchmarking", () => { await buildWrapper( wrapperPath, - name === "current" ? "./polywrap-current.yaml" : "./polywrap.yaml" + name === "current" ? "./polywrap-current.yaml" : "./polywrap.yaml", + true ); const endTime = performance.now(); diff --git a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts index cea0bb531a..eecfbfd5af 100644 --- a/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts @@ -80,7 +80,7 @@ describe("Ethereum Plugin", () => { defaultConfig = getDefaultConfig(connections); client = new PolywrapClient(defaultConfig); - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); const response = await client.invoke({ uri, diff --git a/packages/js/plugins/http/src/__tests__/e2e/integration.spec.ts b/packages/js/plugins/http/src/__tests__/e2e/integration.spec.ts index ac9e083bcf..d8227ecc20 100644 --- a/packages/js/plugins/http/src/__tests__/e2e/integration.spec.ts +++ b/packages/js/plugins/http/src/__tests__/e2e/integration.spec.ts @@ -22,7 +22,7 @@ describe("e2e tests for HttpPlugin", () => { beforeAll(async () => { client = getClient(); - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); }); it("get", async () => { diff --git a/packages/js/plugins/uri-resolvers/ens-resolver/README.md b/packages/js/plugins/uri-resolvers/ens-resolver/README.md index 3353f69018..c78fd238b8 100644 --- a/packages/js/plugins/uri-resolvers/ens-resolver/README.md +++ b/packages/js/plugins/uri-resolvers/ens-resolver/README.md @@ -66,6 +66,7 @@ export async function foo({ ipfsProvider: providers.ipfs, ethereumProvider: providers.ethereum, ensName: "simple-storage.eth", + codegen: true }); // get ENS URI diff --git a/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/e2e.spec.ts b/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/e2e.spec.ts index 633efacf1b..e3e990cfae 100644 --- a/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/e2e.spec.ts @@ -25,6 +25,7 @@ describe("ENS Resolver Plugin", () => { ipfsProvider: providers.ipfs, ethereumProvider: providers.ethereum, ensName: "cool.wrapper.eth", + codegen: true }); wrapperEnsDomain = ensDomain; diff --git a/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/e2e.spec.ts b/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/e2e.spec.ts index 8bc08adb0b..1c886ab762 100644 --- a/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/e2e.spec.ts @@ -14,7 +14,7 @@ describe("Filesystem plugin", () => { let client: PolywrapClient; beforeAll(async () => { - await buildWrapper(simpleWrapperPath); + await buildWrapper(simpleWrapperPath, undefined, true); client = getClient(); }); diff --git a/packages/js/plugins/uri-resolvers/http-resolver/README.md b/packages/js/plugins/uri-resolvers/http-resolver/README.md index 034d7c66fc..d867629f13 100644 --- a/packages/js/plugins/uri-resolvers/http-resolver/README.md +++ b/packages/js/plugins/uri-resolvers/http-resolver/README.md @@ -25,6 +25,7 @@ export async function foo({ wrapperAbsPath: `/path/to/simple-storage`, httpProvider: providers.http, name: "simple-storage", + codegen: true, }); // get wrapper HTTP URI diff --git a/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/e2e.spec.ts b/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/e2e.spec.ts index d2813100a6..91037d187f 100644 --- a/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/e2e.spec.ts @@ -27,7 +27,8 @@ describe("HTTP Plugin", () => { wrapperAbsPath: `${GetPathToTestWrappers()}/wasm-as/simple-storage`, name: wrapperName, httpProvider: providers.http, - }); + codegen: true + }); wrapperHttpUri = uri; diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/README.md b/packages/js/plugins/uri-resolvers/ipfs-resolver/README.md index 1c032974d1..8e6beba6a3 100644 --- a/packages/js/plugins/uri-resolvers/ipfs-resolver/README.md +++ b/packages/js/plugins/uri-resolvers/ipfs-resolver/README.md @@ -30,6 +30,7 @@ export async function foo({ ipfsProvider: providers.ipfs, ethereumProvider: providers.ethereum, ensName: "simple-storage.eth", + codegen: true, }); // get wrapper CID diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts index 02d21fdbbc..62fd2615c0 100644 --- a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts @@ -23,6 +23,7 @@ describe("IPFS Plugin", () => { ipfsProvider: providers.ipfs, ethereumProvider: providers.ethereum, ensName: "cool.wrapper.eth", + codegen: true }); wrapperIpfsCid = ipfsCid; diff --git a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts index 0fc1c90cde..9f5cfac51a 100644 --- a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts +++ b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts @@ -17,7 +17,7 @@ describe("e2e tests for WsPlugin", () => { beforeAll(async () => { client = getClient(); - await buildWrapper(wrapperPath); + await buildWrapper(wrapperPath, undefined, true); }); beforeEach(() => { diff --git a/packages/js/react/src/__tests__/integration.spec.tsx b/packages/js/react/src/__tests__/integration.spec.tsx index 8cfcc13c51..8b5b9bfcac 100644 --- a/packages/js/react/src/__tests__/integration.spec.tsx +++ b/packages/js/react/src/__tests__/integration.spec.tsx @@ -37,6 +37,7 @@ describe("Polywrap React Integration", () => { wrapperAbsPath: `${GetPathToTestWrappers()}/wasm-as/simple-storage`, ipfsProvider: providers.ipfs, ethereumProvider: providers.ethereum, + codegen: true }); ensUri = `ens/testnet/${wrapper.ensDomain}`; diff --git a/packages/js/react/src/__tests__/usePolywrapInvoke.spec.tsx b/packages/js/react/src/__tests__/usePolywrapInvoke.spec.tsx index a5fbbf5aa6..d37e4fc100 100644 --- a/packages/js/react/src/__tests__/usePolywrapInvoke.spec.tsx +++ b/packages/js/react/src/__tests__/usePolywrapInvoke.spec.tsx @@ -35,7 +35,7 @@ describe("usePolywrapInvoke hook", () => { await initTestEnvironment(); const simpleStoragePath = `${GetPathToTestWrappers()}/wasm-as/simple-storage`; - await buildWrapper(simpleStoragePath); + await buildWrapper(simpleStoragePath, undefined, true); uri = `fs/${simpleStoragePath}/build`; envs = createEnvs(providers.ipfs); diff --git a/packages/js/react/src/__tests__/usePolywrapQuery.spec.tsx b/packages/js/react/src/__tests__/usePolywrapQuery.spec.tsx index f81ae3d7c2..85a38e3fbe 100644 --- a/packages/js/react/src/__tests__/usePolywrapQuery.spec.tsx +++ b/packages/js/react/src/__tests__/usePolywrapQuery.spec.tsx @@ -37,11 +37,11 @@ describe("usePolywrapQuery hook", () => { await initTestEnvironment(); const simpleStoragePath = `${GetPathToTestWrappers()}/wasm-as/simple-storage`; - await buildWrapper(simpleStoragePath); + await buildWrapper(simpleStoragePath, undefined, true); uri = `fs/${simpleStoragePath}/build`; const simpleEnvPath = `${GetPathToTestWrappers()}/wasm-as/simple-env-types`; - await buildWrapper(simpleEnvPath); + await buildWrapper(simpleEnvPath, undefined, true); envs = createEnvs(providers.ipfs); packages = createPlugins(ensAddresses.ensAddress, providers.ethereum); diff --git a/packages/js/test-env/README.md b/packages/js/test-env/README.md index 85c5f5a609..a5585a7e15 100644 --- a/packages/js/test-env/README.md +++ b/packages/js/test-env/README.md @@ -31,8 +31,8 @@ export async function foo({ // get path to the wrapper in testing const wrapperPath: string = path.join(path.resolve(__dirname), ".."); - // build current wrapper with CLI - await buildWrapper(wrapperPath); + // build current wrapper with CLI, invoking codegen before build + await buildWrapper(wrapperPath, undefined, true); // get URI to the local wrapper build const wrapperUri = `fs/${wrapperPath}/build`; diff --git a/packages/js/test-env/src/index.ts b/packages/js/test-env/src/index.ts index 48dea38b62..4079a48a05 100644 --- a/packages/js/test-env/src/index.ts +++ b/packages/js/test-env/src/index.ts @@ -203,23 +203,29 @@ export const runCLI = async (options: { export async function buildWrapper( wrapperAbsPath: string, - manifestPathOverride?: string + manifestPathOverride?: string, + codegen?: boolean ): Promise { const manifestPath = manifestPathOverride ? path.join(wrapperAbsPath, manifestPathOverride) : `${wrapperAbsPath}/polywrap.yaml`; - const { - exitCode: codegenExitCode, - stdout: codegenStdout, - stderr: codegenStderr, - } = await runCLI({ args: ["codegen"], cwd: wrapperAbsPath }); - - if (codegenExitCode != 0) { - console.error(`polywrap exited with code: ${codegenExitCode}`); - console.log(`stderr:\n${codegenStdout}`); - console.log(`stdout:\n${codegenStderr}`); - throw Error("polywrap CLI failed"); + if (codegen) { + const { + exitCode: codegenExitCode, + stdout: codegenStdout, + stderr: codegenStderr, + } = await runCLI({ + args: ["codegen", "--manifest-file", manifestPath], + cwd: wrapperAbsPath, + }); + + if (codegenExitCode != 0) { + console.error(`polywrap exited with code: ${codegenExitCode}`); + console.log(`stderr:\n${codegenStdout}`); + console.log(`stdout:\n${codegenStderr}`); + throw Error("polywrap CLI failed"); + } } const { @@ -249,11 +255,13 @@ export async function buildAndDeployWrapper({ ipfsProvider, ethereumProvider, ensName, + codegen, }: { wrapperAbsPath: string; ipfsProvider: string; ethereumProvider: string; ensName?: string; + codegen?: boolean; }): Promise<{ ensDomain: string; ipfsCid: string; @@ -270,7 +278,7 @@ export async function buildAndDeployWrapper({ // create a new ENS domain const wrapperEns = ensName ?? `${generateName()}.eth`; - await buildWrapper(wrapperAbsPath); + await buildWrapper(wrapperAbsPath, undefined, codegen); // manually configure manifests const { __type, ...polywrapManifest } = deserializePolywrapManifest( @@ -377,10 +385,12 @@ export async function buildAndDeployWrapperToHttp({ wrapperAbsPath, httpProvider, name, + codegen, }: { wrapperAbsPath: string; httpProvider: string; name?: string; + codegen?: boolean; }): Promise<{ uri: string }> { const manifestPath = `${wrapperAbsPath}/polywrap.yaml`; const tempManifestFilename = `polywrap-temp.yaml`; @@ -394,7 +404,7 @@ export async function buildAndDeployWrapperToHttp({ const wrapperName = name ?? generateName(); const postUrl = `${httpProvider}/wrappers/local/${wrapperName}`; - await buildWrapper(wrapperAbsPath); + await buildWrapper(wrapperAbsPath, undefined, codegen); // manually configure manifests diff --git a/packages/js/wasm/src/__tests__/in-memory-file-reader.spec.ts b/packages/js/wasm/src/__tests__/in-memory-file-reader.spec.ts index 056b1d2073..2081ed54af 100644 --- a/packages/js/wasm/src/__tests__/in-memory-file-reader.spec.ts +++ b/packages/js/wasm/src/__tests__/in-memory-file-reader.spec.ts @@ -11,7 +11,7 @@ const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; describe("In-memory file reader", () => { beforeAll(async () => { - await buildWrapper(simpleWrapperPath); + await buildWrapper(simpleWrapperPath, undefined, true); }); it("can create in-memory file reader from buffers", async () => { diff --git a/packages/js/wasm/src/__tests__/in-memory-packages.spec.ts b/packages/js/wasm/src/__tests__/in-memory-packages.spec.ts index 6bf8460c21..954fb28ce5 100644 --- a/packages/js/wasm/src/__tests__/in-memory-packages.spec.ts +++ b/packages/js/wasm/src/__tests__/in-memory-packages.spec.ts @@ -13,7 +13,7 @@ const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; describe("In-memory packages", () => { beforeAll(async () => { - await buildWrapper(simpleWrapperPath); + await buildWrapper(simpleWrapperPath, undefined, true); }); it("can create in-memory packages from buffers", async () => { diff --git a/packages/js/wasm/src/__tests__/in-memory-wrappers.spec.ts b/packages/js/wasm/src/__tests__/in-memory-wrappers.spec.ts index 848fb983b7..7f7fce0a22 100644 --- a/packages/js/wasm/src/__tests__/in-memory-wrappers.spec.ts +++ b/packages/js/wasm/src/__tests__/in-memory-wrappers.spec.ts @@ -13,7 +13,7 @@ const simpleWrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; describe("In-memory wrappers", () => { beforeAll(async () => { - await buildWrapper(simpleWrapperPath); + await buildWrapper(simpleWrapperPath, undefined, true); }); it("can create in-memory wrappers from buffers", async () => { From 6560862cee73fd039206d2949accafd0a2dcc9be Mon Sep 17 00:00:00 2001 From: Pileks Date: Fri, 11 Nov 2022 00:30:54 +0100 Subject: [PATCH 14/29] add codegen before build in build tests --- packages/cli/src/__tests__/e2e/build-rs.spec.ts | 6 +++--- packages/cli/src/__tests__/e2e/build.wasm.spec.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/__tests__/e2e/build-rs.spec.ts b/packages/cli/src/__tests__/e2e/build-rs.spec.ts index ddd4d9a5ca..0238e7a15b 100644 --- a/packages/cli/src/__tests__/e2e/build-rs.spec.ts +++ b/packages/cli/src/__tests__/e2e/build-rs.spec.ts @@ -20,7 +20,7 @@ describe("e2e tests for build command", () => { describe("Image strategy", () => { it("Builds for rust", async () => { const { exitCode: code, stdout: output } = await runCLI({ - args: ["build", "-v", "-s", "image"], + args: ["build", "-v", "--codegen", "-s", "image"], cwd: getTestCaseDir(0), cli: polywrapCli, }); @@ -37,7 +37,7 @@ describe("e2e tests for build command", () => { describe.skip("Local strategy", () => { it("Builds for rust", async () => { const { exitCode: code, stdout: output } = await runCLI({ - args: ["build", "-v", "-s", "local"], + args: ["build", "-v", "--codegen", "-s", "local"], cwd: getTestCaseDir(0), cli: polywrapCli, }); @@ -53,7 +53,7 @@ describe("e2e tests for build command", () => { describe("VM strategy", () => { it("Builds for rust", async () => { const { exitCode: code, stdout: output } = await runCLI({ - args: ["build", "-v", "-s", "vm"], + args: ["build", "-v", "--codegen", "-s", "vm"], cwd: getTestCaseDir(0), cli: polywrapCli, }); diff --git a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts index ce81cd4b8a..a347047919 100644 --- a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts +++ b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts @@ -158,7 +158,7 @@ describe("e2e tests for build command", () => { ); const testCaseDir = getTestCaseDir(0); const { exitCode: code, stdout: output } = await runCLI({ - args: ["build", "-v", "--output-dir", outputDir], + args: ["build", "-v", "--output-dir", outputDir, "--codegen"], cwd: testCaseDir, cli: polywrapCli, }); @@ -262,7 +262,7 @@ describe("e2e tests for build command", () => { test(testCaseName, async () => { let { exitCode, stdout, stderr } = await runCLI({ - args: ["build", "-v", ...cmdArgs], + args: ["build", "-v", "--codegen", ...cmdArgs], cwd: testCaseDir, cli: polywrapCli, }); From af6e7f08cc1bb88384070bc819e079e6536d6140 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 28 Nov 2022 17:35:58 +0100 Subject: [PATCH 15/29] chore: refactor testBuildOutput --- .../cli/src/__tests__/e2e/build.wasm.spec.ts | 19 ------------------- .../__tests__/e2e/helpers/testBuildOutput.ts | 11 +++-------- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts index f9e7b231ac..a347047919 100644 --- a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts +++ b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts @@ -90,25 +90,6 @@ describe("e2e tests for build command", () => { } }; - const testBuildOutput = (testCaseDir: string, buildDir: string) => { - const expectedOutputFile = path.join( - testCaseDir, - "expected", - "output.json" - ); - if (fs.existsSync(expectedOutputFile)) { - const expectedFiles = JSON.parse( - fs.readFileSync(expectedOutputFile, { encoding: "utf8" }) - ); - - for (const file of expectedFiles) { - if (!fs.existsSync(path.join(buildDir, file))) { - fail(`Did not find expected file: ${path.join(buildDir, file)}`); - } - } - } - }; - it("Should show help text", async () => { const { exitCode: code, stdout: output, stderr: error } = await runCLI({ args: ["build", "--help"], diff --git a/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts b/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts index 190b1fcc94..2d956f176a 100644 --- a/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts +++ b/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts @@ -2,11 +2,7 @@ import path from "path"; import fs from "fs"; export const testBuildOutput = (testCaseDir: string, buildDir: string) => { - const expectedOutputFile = path.join( - testCaseDir, - "expected", - "output.json" - ); + const expectedOutputFile = path.join(testCaseDir, "expected", "output.json"); if (fs.existsSync(expectedOutputFile)) { const expectedFiles = JSON.parse( fs.readFileSync(expectedOutputFile, { encoding: "utf8" }) @@ -14,9 +10,8 @@ export const testBuildOutput = (testCaseDir: string, buildDir: string) => { for (const file of expectedFiles) { if (!fs.existsSync(path.join(buildDir, file))) { - expect(path.join(buildDir, file)).toBe("debug") + fail(`Did not find expected file: ${path.join(buildDir, file)}`); } - expect(fs.existsSync(path.join(buildDir, file))).toBeTruthy(); } } -}; \ No newline at end of file +}; From ae18eaeec282ba88b51c3919df22c8e4b16bfd69 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 12:35:27 +0100 Subject: [PATCH 16/29] chore: fix CLI tests --- packages/cli/src/__tests__/e2e/build.wasm.spec.ts | 2 ++ packages/cli/src/commands/codegen.ts | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts index a347047919..e5e8bbb8fe 100644 --- a/packages/cli/src/__tests__/e2e/build.wasm.spec.ts +++ b/packages/cli/src/__tests__/e2e/build.wasm.spec.ts @@ -21,6 +21,8 @@ Options: --codegen Perform code generation before build --codegen-dir Codegen output directory (default: ./src/wrap) + --wrapper-envs Path to a JSON file containing wrapper + envs -s, --strategy Strategy to use for building the wrapper (default: "vm") -w, --watch Automatically rebuild when changes are diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 3a8b2407d7..cddb489d66 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -19,8 +19,6 @@ import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; import { Env, PolywrapClient } from "@polywrap/client-js"; -import path from "path"; -import fs from "fs"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; const pathStr = intlMsg.commands_codegen_options_o_path(); @@ -97,7 +95,6 @@ async function run(options: CodegenCommandOptions) { script, configBuilder, wrapperEnvs, - publishDir, verbose, quiet, logFile, From c2ac4fbc3025b8f6bace7c638ce2f97ed2ccfc0c Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 19:10:14 +0100 Subject: [PATCH 17/29] patch commands for plugin build --- packages/js/plugins/ethereum/package.json | 3 ++- packages/js/plugins/file-system/package.json | 3 ++- .../file-system/{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/http/package.json | 3 ++- .../js/plugins/http/{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/ipfs/package.json | 3 ++- .../js/plugins/ipfs/{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/uri-resolvers/ens-resolver/package.json | 3 ++- .../ens-resolver/{polywrap.plugin.yaml => polywrap.yaml} | 0 .../js/plugins/uri-resolvers/file-system-resolver/package.json | 3 ++- .../{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/uri-resolvers/http-resolver/package.json | 3 ++- .../http-resolver/{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/uri-resolvers/ipfs-resolver/package.json | 3 ++- .../ipfs-resolver/{polywrap.plugin.yaml => polywrap.yaml} | 0 packages/js/plugins/ws/package.json | 3 ++- packages/js/plugins/ws/{polywrap.plugin.yaml => polywrap.yaml} | 0 17 files changed, 18 insertions(+), 9 deletions(-) rename packages/js/plugins/file-system/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/http/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/ipfs/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/uri-resolvers/ens-resolver/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/uri-resolvers/file-system-resolver/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/uri-resolvers/http-resolver/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/uri-resolvers/ipfs-resolver/{polywrap.plugin.yaml => polywrap.yaml} (100%) rename packages/js/plugins/ws/{polywrap.plugin.yaml => polywrap.yaml} (100%) diff --git a/packages/js/plugins/ethereum/package.json b/packages/js/plugins/ethereum/package.json index 8c2b26136e..b6bc01ee40 100644 --- a/packages/js/plugins/ethereum/package.json +++ b/packages/js/plugins/ethereum/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/file-system/package.json b/packages/js/plugins/file-system/package.json index 017e19b857..da06214e1f 100644 --- a/packages/js/plugins/file-system/package.json +++ b/packages/js/plugins/file-system/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/file-system/polywrap.plugin.yaml b/packages/js/plugins/file-system/polywrap.yaml similarity index 100% rename from packages/js/plugins/file-system/polywrap.plugin.yaml rename to packages/js/plugins/file-system/polywrap.yaml diff --git a/packages/js/plugins/http/package.json b/packages/js/plugins/http/package.json index c9db72c37d..6a48dc35d7 100644 --- a/packages/js/plugins/http/package.json +++ b/packages/js/plugins/http/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/http/polywrap.plugin.yaml b/packages/js/plugins/http/polywrap.yaml similarity index 100% rename from packages/js/plugins/http/polywrap.plugin.yaml rename to packages/js/plugins/http/polywrap.yaml diff --git a/packages/js/plugins/ipfs/package.json b/packages/js/plugins/ipfs/package.json index ec37953014..409057f253 100644 --- a/packages/js/plugins/ipfs/package.json +++ b/packages/js/plugins/ipfs/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/ipfs/polywrap.plugin.yaml b/packages/js/plugins/ipfs/polywrap.yaml similarity index 100% rename from packages/js/plugins/ipfs/polywrap.plugin.yaml rename to packages/js/plugins/ipfs/polywrap.yaml diff --git a/packages/js/plugins/uri-resolvers/ens-resolver/package.json b/packages/js/plugins/uri-resolvers/ens-resolver/package.json index 60ba813681..f3995279b9 100644 --- a/packages/js/plugins/uri-resolvers/ens-resolver/package.json +++ b/packages/js/plugins/uri-resolvers/ens-resolver/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/uri-resolvers/ens-resolver/polywrap.plugin.yaml b/packages/js/plugins/uri-resolvers/ens-resolver/polywrap.yaml similarity index 100% rename from packages/js/plugins/uri-resolvers/ens-resolver/polywrap.plugin.yaml rename to packages/js/plugins/uri-resolvers/ens-resolver/polywrap.yaml diff --git a/packages/js/plugins/uri-resolvers/file-system-resolver/package.json b/packages/js/plugins/uri-resolvers/file-system-resolver/package.json index 34c4581592..61ca9e1a3a 100644 --- a/packages/js/plugins/uri-resolvers/file-system-resolver/package.json +++ b/packages/js/plugins/uri-resolvers/file-system-resolver/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/uri-resolvers/file-system-resolver/polywrap.plugin.yaml b/packages/js/plugins/uri-resolvers/file-system-resolver/polywrap.yaml similarity index 100% rename from packages/js/plugins/uri-resolvers/file-system-resolver/polywrap.plugin.yaml rename to packages/js/plugins/uri-resolvers/file-system-resolver/polywrap.yaml diff --git a/packages/js/plugins/uri-resolvers/http-resolver/package.json b/packages/js/plugins/uri-resolvers/http-resolver/package.json index d39a5210c1..15784daa78 100644 --- a/packages/js/plugins/uri-resolvers/http-resolver/package.json +++ b/packages/js/plugins/uri-resolvers/http-resolver/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "codegen:patch": "node ../../../../cli/bin/polywrap plugin codegen && rimraf ./src/wrap", "lint": "eslint --color -c ../../../../../.eslintrc.js src/", diff --git a/packages/js/plugins/uri-resolvers/http-resolver/polywrap.plugin.yaml b/packages/js/plugins/uri-resolvers/http-resolver/polywrap.yaml similarity index 100% rename from packages/js/plugins/uri-resolvers/http-resolver/polywrap.plugin.yaml rename to packages/js/plugins/uri-resolvers/http-resolver/polywrap.yaml diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/package.json b/packages/js/plugins/uri-resolvers/ipfs-resolver/package.json index daf3a04833..7e20ef4c5e 100644 --- a/packages/js/plugins/uri-resolvers/ipfs-resolver/package.json +++ b/packages/js/plugins/uri-resolvers/ipfs-resolver/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/polywrap.plugin.yaml b/packages/js/plugins/uri-resolvers/ipfs-resolver/polywrap.yaml similarity index 100% rename from packages/js/plugins/uri-resolvers/ipfs-resolver/polywrap.plugin.yaml rename to packages/js/plugins/uri-resolvers/ipfs-resolver/polywrap.yaml diff --git a/packages/js/plugins/ws/package.json b/packages/js/plugins/ws/package.json index 2c0d412704..428c36d6e1 100644 --- a/packages/js/plugins/ws/package.json +++ b/packages/js/plugins/ws/package.json @@ -12,7 +12,8 @@ "build" ], "scripts": { - "build": "rimraf ./build && yarn codegen && tsc --project tsconfig.build.json", + "build": "rimraf ./build && yarn codegen && yarn build:patch && tsc --project tsconfig.build.json", + "build:patch": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap build || echo '`polywrap build` failed - see PR #1385 for details'", "codegen": "node ../../../../dependencies/node_modules/polywrap/bin/polywrap codegen", "lint": "eslint --color -c ../../../../.eslintrc.js src/", "test": "jest --passWithNoTests --runInBand --verbose", diff --git a/packages/js/plugins/ws/polywrap.plugin.yaml b/packages/js/plugins/ws/polywrap.yaml similarity index 100% rename from packages/js/plugins/ws/polywrap.plugin.yaml rename to packages/js/plugins/ws/polywrap.yaml From ba8cc29a2506502553dbea86b1233f094004245e Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 19:16:19 +0100 Subject: [PATCH 18/29] chore: intlMsg --- packages/cli/lang/en.json | 1 + packages/cli/lang/es.json | 1 + packages/cli/src/commands/build.ts | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index 1b87e5fdca..38fa66de35 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -24,6 +24,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", + "commands_build_error_codegen_failed": "Code generation failed!", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index 1b87e5fdca..38fa66de35 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -24,6 +24,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", + "commands_build_error_codegen_failed": "Code generation failed!", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 6086e5cdae..a2d47e316b 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -223,7 +223,7 @@ async function run(options: BuildCommandOptions) { const codegenSuccess = await codeGenerator.generate(); if (!codegenSuccess) { - logger.error("Codegen failed before build!"); + logger.error(intlMsg.commands_build_error_codegen_failed()); return false; } } @@ -263,7 +263,7 @@ async function run(options: BuildCommandOptions) { const codegenSuccess = await codeGenerator.generate(); if (!codegenSuccess) { - logger.error("Codegen failed before build!"); + logger.error(intlMsg.commands_build_error_codegen_failed()); return false; } } From 92759303a00c9fc2b4fd3645f366b41e27ebc472 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 21:45:46 +0100 Subject: [PATCH 19/29] fix improper build in tests --- packages/js/client/src/__tests__/core/sanity.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/js/client/src/__tests__/core/sanity.spec.ts b/packages/js/client/src/__tests__/core/sanity.spec.ts index 236d552eab..dd3309394b 100644 --- a/packages/js/client/src/__tests__/core/sanity.spec.ts +++ b/packages/js/client/src/__tests__/core/sanity.spec.ts @@ -64,7 +64,7 @@ describe("sanity", () => { envs: undefined } - await buildWrapper(fooPath); + await buildWrapper(fooPath, undefined, true); let client = new PolywrapClient(config as PolywrapCoreClientConfig, { noDefaults: true }); let result = await client.validate(fooUri, {}); expect(result.ok).toBeFalsy(); @@ -97,7 +97,7 @@ describe("sanity", () => { expect(resultError).toBeTruthy(); expect(resultError.message).toContain("Error resolving URI"); - await buildWrapper(greetingPath); + await buildWrapper(greetingPath, undefined, true); let modifiedFooWrapper: IUriPackage = { uri: greetingUri, @@ -115,7 +115,7 @@ describe("sanity", () => { expect(result.ok).toBeTruthy() - await buildWrapper(modifiedFooPath); + await buildWrapper(modifiedFooPath, undefined, true); let redirectUri: IUriRedirect = { from: fooUri, to: modifiedFooUri From 72497d7b5e8f4c902dd8de68447e4dcba86b0a42 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 22:07:00 +0100 Subject: [PATCH 20/29] WS plugin cache test timing issue - delay 3rd message --- packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts index 9f5cfac51a..2fc361a30f 100644 --- a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts +++ b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts @@ -134,7 +134,7 @@ describe("e2e tests for WsPlugin", () => { }, 20); let t3 = setTimeout(() => { server.send("3"); - }, 30); + }, 50); const response = await client.invoke({ uri, From 164fbf2953ffac39bb908ccc0224e2fe5c19bdad Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 22:07:22 +0100 Subject: [PATCH 21/29] remove yarn.lock from test case --- .../assemblyscript/001-sanity/yarn.lock | 70 ------------------- 1 file changed, 70 deletions(-) delete mode 100644 packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock deleted file mode 100644 index d01958756b..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/001-sanity/yarn.lock +++ /dev/null @@ -1,70 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@polywrap/wasm-as@../../../../../../../wasm/as": - version "0.9.3" - dependencies: - "@web3api/assemblyscript-json" "1.2.0" - as-bigint "0.5.3" - as-bignumber "0.2.1" - as-container "0.6.1" - -"@web3api/assemblyscript-json@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@web3api/assemblyscript-json/-/assemblyscript-json-1.2.0.tgz#f01f11f12a66cd1a319d43f12e476307d1ad3da8" - integrity sha512-x+wchJpH1giJzXj3dYs8vh2SKMXepeqVXiaFV/YCtXg4X/KaUnxi0kp5JugbEAyEJurEScH1YuV6IvGhGui/fw== - -as-bigint@0.5.3, as-bigint@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/as-bigint/-/as-bigint-0.5.3.tgz#a0647d0b7ce835077aca33115e71eb26a83df8be" - integrity sha512-tg9iTO/vPeovOM5CSk1WxYcsfBd/cd3twhBW5PrpcGUfiSEXlPB69eOxFKvSbZnpuDxBAyQ4YBgEkfnYL89Czw== - -as-bignumber@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/as-bignumber/-/as-bignumber-0.2.1.tgz#6479caca7f24f784b10b3d2633cde457ef9cbc22" - integrity sha512-udKOlFYKSZyuHK7upTczRR8lcXkyPS0DR6NOtP+c3bhM4B2B0VqMBTzqa0hdYG4Zss94zA6UmqpjreEbzNUo4g== - dependencies: - as-bigint "^0.5.1" - -as-container@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/as-container/-/as-container-0.6.1.tgz#94806a91e96b68622c55f301fc04e6339a1228c2" - integrity sha512-cgQ7P/dQAGeU2lLhPpinThYfFcUw3HzV8b00CoqV+l5Tsgpl7xhXdoc/2srCyK0um1BVAQwlrEpNTtthzkMF+g== - -assemblyscript@0.19.23: - version "0.19.23" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" - integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== - dependencies: - binaryen "102.0.0-nightly.20211028" - long "^5.2.0" - source-map-support "^0.5.20" - -binaryen@102.0.0-nightly.20211028: - version "102.0.0-nightly.20211028" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" - integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -long@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.1.tgz#e27595d0083d103d2fa2c20c7699f8e0c92b897f" - integrity sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A== - -source-map-support@^0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== From 11cfd502a3a924fa510884dd3aa9eed3230942c0 Mon Sep 17 00:00:00 2001 From: Pileks Date: Mon, 5 Dec 2022 22:38:16 +0100 Subject: [PATCH 22/29] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4559675cb4..23f60c4f6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,9 @@ * A `-l, --log-file [path]` option has been added to all commands. Its purpose is to configure a `Log file to save console output to`, useful in situations when the console log overflows. ## Breaking Changes +* [PR-1385](https://github.com/polywrap/toolchain/pull/1385) `polywrap` CLI: + * Running `polywrap build` no longer automatically generates code bindings (`codegen`). You need to either run `polywrap codegen` before running `polywrap build`, or run `polywrap build` with the `--codegen` flag. + * Running `polywrap codegen` in Plugin Projects will no longer output the WRAP ABI (`wrap.info`) file into a build folder. To output the WRAP ABI, you need to run `polywrap build` within your Plugin Project. * [PR-1436](https://github.com/polywrap/toolchain/pull/1436) `@polywrap/client-config-builder-js`: * Default client config no longer uses the `wrap://ens/logger.core.polywrap.eth` interface URI, or `wrap://ens/js-logger.polywrap.eth` plugin URI. * [PR-1369](https://github.com/polywrap/toolchain/pull/1369) `@polywrap/client-config-builder-js`: From bf1854bbbc1e320ea5b8d6fda6e389a19b3d104a Mon Sep 17 00:00:00 2001 From: Pileks Date: Tue, 20 Dec 2022 19:00:37 +0100 Subject: [PATCH 23/29] CLI codegen command - log error when project fails to load --- packages/cli/lang/en.json | 1 + packages/cli/lang/es.json | 1 + packages/cli/src/commands/codegen.ts | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index 38fa66de35..79633ce515 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -90,6 +90,7 @@ "commands_codegen_options_o": "Output directory for custom generated types (default: 'types/')", "commands_codegen_options_o_path": "path", "commands_codegen_success": "Types were generated successfully", + "commands_codegen_project_load_error": "Failed to load project! Please make sure {manifestPath} is a valid Project manifest!", "commands_codegen_options_publish": "Output path for the built schema and manifest (default: {default})", "commands_docgen_description": "Generate wrapper documentation", "commands_docgen_success": "Docs were generated successfully", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index 38fa66de35..79633ce515 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -90,6 +90,7 @@ "commands_codegen_options_o": "Output directory for custom generated types (default: 'types/')", "commands_codegen_options_o_path": "path", "commands_codegen_success": "Types were generated successfully", + "commands_codegen_project_load_error": "Failed to load project! Please make sure {manifestPath} is a valid Project manifest!", "commands_codegen_options_publish": "Output path for the built schema and manifest (default: {default})", "commands_docgen_description": "Generate wrapper documentation", "commands_docgen_success": "Docs were generated successfully", diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index cddb489d66..1b29c7e9a5 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -113,7 +113,12 @@ async function run(options: CodegenCommandOptions) { const project = await getProjectFromManifest(manifestFile, logger); if (!project) { - return; + logger.error( + `${intlMsg.commands_codegen_project_load_error({ + manifestPath: manifestFile, + })}` + ); + process.exit(1); } const schemaComposer = new SchemaComposer({ From c19eb8ef3c622297671f118fd76c1bd5524fd447 Mon Sep 17 00:00:00 2001 From: Pileks Date: Tue, 20 Dec 2022 20:55:32 +0100 Subject: [PATCH 24/29] fix plugin codegen test case --- .../plugin/codegen/007-interface-comments/expected/stdout.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/stdout.json b/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/stdout.json index d1dc098fa5..0444f5f692 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/stdout.json +++ b/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/stdout.json @@ -2,7 +2,7 @@ "stdout": [ "Manifest loaded from ./polywrap.plugin.yaml", "Generate types", - "Manifest written to ./build/wrap.info" + "Types were generated successfully" ], "exitCode": 0 } From 178176d02e8402bcbafc010a7c86f619a654657e Mon Sep 17 00:00:00 2001 From: dOrgJelli Date: Tue, 3 Jan 2023 01:18:58 -0500 Subject: [PATCH 25/29] fix: remove exclamations from output strings --- packages/cli/lang/en.json | 4 ++-- packages/cli/lang/es.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index 79633ce515..a38cb86dc5 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -24,7 +24,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", - "commands_build_error_codegen_failed": "Code generation failed!", + "commands_build_error_codegen_failed": "Code generation failed", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", @@ -90,7 +90,7 @@ "commands_codegen_options_o": "Output directory for custom generated types (default: 'types/')", "commands_codegen_options_o_path": "path", "commands_codegen_success": "Types were generated successfully", - "commands_codegen_project_load_error": "Failed to load project! Please make sure {manifestPath} is a valid Project manifest!", + "commands_codegen_project_load_error": "Failed to load project, please make sure {manifestPath} is a valid Project manifest", "commands_codegen_options_publish": "Output path for the built schema and manifest (default: {default})", "commands_docgen_description": "Generate wrapper documentation", "commands_docgen_success": "Docs were generated successfully", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index 79633ce515..a38cb86dc5 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -24,7 +24,7 @@ "commands_build_options_s": "Strategy to use for building the wrapper", "commands_build_options_s_strategy": "strategy", "commands_build_options_l": "Log file to save console output to", - "commands_build_error_codegen_failed": "Code generation failed!", + "commands_build_error_codegen_failed": "Code generation failed", "commands_infra_description": "Modular Infrastructure-As-Code Orchestrator", "commands_infra_actions_subtitle": "Infra allows you to execute the following commands:", "commands_infra_options_options": "options", @@ -90,7 +90,7 @@ "commands_codegen_options_o": "Output directory for custom generated types (default: 'types/')", "commands_codegen_options_o_path": "path", "commands_codegen_success": "Types were generated successfully", - "commands_codegen_project_load_error": "Failed to load project! Please make sure {manifestPath} is a valid Project manifest!", + "commands_codegen_project_load_error": "Failed to load project, please make sure {manifestPath} is a valid Project manifest", "commands_codegen_options_publish": "Output path for the built schema and manifest (default: {default})", "commands_docgen_description": "Generate wrapper documentation", "commands_docgen_success": "Docs were generated successfully", From 3ec283561465e9dccc4bfdac0caf4327eeae9090 Mon Sep 17 00:00:00 2001 From: dOrgJelli Date: Tue, 3 Jan 2023 01:48:43 -0500 Subject: [PATCH 26/29] chore: move plugin build logic into compiler --- packages/cli/lang/en.json | 4 +- packages/cli/lang/es.json | 4 +- packages/cli/src/commands/build.ts | 94 +++++++--------------------- packages/cli/src/lib/Compiler.ts | 36 ++++++----- packages/cli/src/lib/helpers/wrap.ts | 18 +++++- 5 files changed, 67 insertions(+), 89 deletions(-) diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index a38cb86dc5..2281a0c78f 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -216,7 +216,8 @@ "lib_compiler_noNodeModules": "could not locate {folder} in parent directories of polywrap manifest", "lib_compiler_noInvoke": "WASM module is missing the _wrap_invoke export. This should never happen...", "lib_compiler_invalid_module": "Invalid Wasm module found. {modulePath} is invalid. Error: {error}", - "lib_compiler_cannotBuildInterfaceModules": "Cannot build modules for an Interface Polywrap", + "lib_compiler_cannotBuildModule": "Cannot build the module for a project of type {project}", + "lib_compiler_missingBuildStrategy": "The compiler is missing a build strategy", "lib_compiler_copyResourcesFolderText": "Copying resources folder: {folder}", "lib_compiler_copyResourcesFolderError": "Failed to copy resources folder: {folder}", "lib_compiler_copyResourcesFolderWarning": "Warnings copying resources folder: {folder}", @@ -255,6 +256,7 @@ "lib_helpers_docker_projectFolderMissing": "Build image `{image}` missing /project folder", "lib_helpers_docker_projectBuildFolderMissing": "Build image `{image}` missing build artifact `{artifact}` in folder /project/build", "lib_helpers_parameters_unexpectedValue": "Unexpected value provided for one or more of {options}. See --help for more information.", + "lib_helpers_wrap_unsupportedType": "Unsupported WRAP type {type}", "lib_language_unsupportedManifestLanguage": "The manifest's language {language} is not supported. Please use one of the supported lanauges: {supported}", "lib_language_noInterfaceCodegen": "Code generation cannot be run for Polywrap Interface projects", "lib_system_env_var_not_found": "Environment variable not found: `{variableName}`", diff --git a/packages/cli/lang/es.json b/packages/cli/lang/es.json index a38cb86dc5..2281a0c78f 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -216,7 +216,8 @@ "lib_compiler_noNodeModules": "could not locate {folder} in parent directories of polywrap manifest", "lib_compiler_noInvoke": "WASM module is missing the _wrap_invoke export. This should never happen...", "lib_compiler_invalid_module": "Invalid Wasm module found. {modulePath} is invalid. Error: {error}", - "lib_compiler_cannotBuildInterfaceModules": "Cannot build modules for an Interface Polywrap", + "lib_compiler_cannotBuildModule": "Cannot build the module for a project of type {project}", + "lib_compiler_missingBuildStrategy": "The compiler is missing a build strategy", "lib_compiler_copyResourcesFolderText": "Copying resources folder: {folder}", "lib_compiler_copyResourcesFolderError": "Failed to copy resources folder: {folder}", "lib_compiler_copyResourcesFolderWarning": "Warnings copying resources folder: {folder}", @@ -255,6 +256,7 @@ "lib_helpers_docker_projectFolderMissing": "Build image `{image}` missing /project folder", "lib_helpers_docker_projectBuildFolderMissing": "Build image `{image}` missing build artifact `{artifact}` in folder /project/build", "lib_helpers_parameters_unexpectedValue": "Unexpected value provided for one or more of {options}. See --help for more information.", + "lib_helpers_wrap_unsupportedType": "Unsupported WRAP type {type}", "lib_language_unsupportedManifestLanguage": "The manifest's language {language} is not supported. Please use one of the supported lanauges: {supported}", "lib_language_noInterfaceCodegen": "Code generation cannot be run for Polywrap Interface projects", "lib_system_env_var_not_found": "Environment variable not found: `{variableName}`", diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index a2d47e316b..eb692727aa 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -15,8 +15,6 @@ import { parseLogFileOption, getProjectFromManifest, isPolywrapManifestLanguage, - isPluginManifestLanguage, - generateWrapFile, polywrapManifestLanguages, pluginManifestLanguages, parseWrapperEnvsOption, @@ -31,8 +29,6 @@ import { } from "../lib/build-strategies"; import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; -import fs from "fs"; -import path from "path"; import readline from "readline"; import { Env, PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; @@ -197,23 +193,34 @@ async function run(options: BuildCommandOptions) { const manifest = await project.getManifest(); const language = manifest.project.type; - let execute: () => Promise; + if (supportedProjectTypes.indexOf(language) === -1) { + logger.error( + intlMsg.commands_build_error_unsupportedProjectType({ + supportedTypes: supportedProjectTypes.join(", "), + }) + ); + process.exit(1); + } + + let buildStrategy: BuildStrategy; if (isPolywrapManifestLanguage(language)) { await validateManifestModules(manifest as PolywrapManifest); - const buildStrategy = createBuildStrategy( + buildStrategy = createBuildStrategy( strategy, outputDir, project as PolywrapProject ); + } - execute = async (): Promise => { + const execute = async (): Promise => { + try { const schemaComposer = new SchemaComposer({ project, client, }); - + if (codegen) { const codeGenerator = new CodeGenerator({ project, @@ -221,79 +228,26 @@ async function run(options: BuildCommandOptions) { codegenDirAbs: codegenDir, }); const codegenSuccess = await codeGenerator.generate(); - + if (!codegenSuccess) { logger.error(intlMsg.commands_build_error_codegen_failed()); return false; } } - + const compiler = new Compiler({ project: project as PolywrapProject, outputDir, schemaComposer, buildStrategy, }); - - const result = await compiler.compile(); - - if (!result) { - return result; - } - - return true; - }; - } else if (isPluginManifestLanguage(language)) { - execute = async (): Promise => { - const schemaComposer = new SchemaComposer({ - project, - client, - }); - - // Output the built manifest - const manifestPath = path.join(outputDir, "wrap.info"); - - try { - if (codegen) { - const codeGenerator = new CodeGenerator({ - project, - schemaComposer, - codegenDirAbs: codegenDir, - }); - const codegenSuccess = await codeGenerator.generate(); - - if (!codegenSuccess) { - logger.error(intlMsg.commands_build_error_codegen_failed()); - return false; - } - } - - if (!fs.existsSync(outputDir)) { - fs.mkdirSync(outputDir); - } - - await generateWrapFile( - await schemaComposer.getComposedAbis(), - await project.getName(), - "plugin", - manifestPath, - logger - ); - } catch (err) { - logger.error(err.message); - return false; - } - - return true; - }; - } else { - logger.error( - intlMsg.commands_build_error_unsupportedProjectType({ - supportedTypes: supportedProjectTypes.join(", "), - }) - ); - return; - } + + return await compiler.compile(); + } catch (err) { + logger.error(err.message); + return false; + } + }; if (!watch) { const result = await execute(); diff --git a/packages/cli/src/lib/Compiler.ts b/packages/cli/src/lib/Compiler.ts index 639a9132d9..a5c8442385 100644 --- a/packages/cli/src/lib/Compiler.ts +++ b/packages/cli/src/lib/Compiler.ts @@ -6,6 +6,7 @@ import { generateWrapFile, intlMsg, PolywrapProject, + PluginProject, resetDir, SchemaComposer, logActivity, @@ -21,8 +22,8 @@ import path from "path"; export interface CompilerConfig { outputDir: string; - project: PolywrapProject; - buildStrategy: BuildStrategy; + project: PolywrapProject | PluginProject; + buildStrategy?: BuildStrategy; schemaComposer: SchemaComposer; } @@ -39,13 +40,13 @@ export class Compiler { // Output: wrap.info await this._outputWrapManifest(); - if (!(await this._isInterface())) { - // Compile the Wrapper + if (await this._isWasm()) { + // Build & Output: wasm.wrap await this._buildModules(); - } - // Copy: Resources folder - await this._copyResourcesFolder(); + // Copy: Resources folder + await this._copyResourcesFolder(); + } }; try { @@ -64,17 +65,24 @@ export class Compiler { } } - private async _isInterface(): Promise { + private async _isWasm(): Promise { const { project } = this._config; const manifest = await project.getManifest(); - return manifest.project.type === "interface"; + return manifest.project.type.startsWith("wasm/"); } private async _buildModules(): Promise { - const { outputDir } = this._config; + const { outputDir, project } = this._config; - if (await this._isInterface()) { - throw Error(intlMsg.lib_compiler_cannotBuildInterfaceModules()); + if (!this._config.buildStrategy) { + throw Error(intlMsg.lib_compiler_missingBuildStrategy()); + } + + if (!await this._isWasm()) { + const manifest = await project.getManifest(); + throw Error(intlMsg.lib_compiler_cannotBuildModule({ + project: manifest.project.type + })); } // Build the sources @@ -90,7 +98,7 @@ export class Compiler { const run = async () => { const manifest = await project.getManifest(); - const type = (await this._isInterface()) ? "interface" : "wasm"; + const type = manifest.project.type.split("/")[0]; const abi = await schemaComposer.getComposedAbis(); await generateWrapFile( abi, @@ -122,7 +130,7 @@ export class Compiler { private async _copyResourcesFolder(): Promise { const { outputDir, project } = this._config; - const projectManifest = await project.getManifest(); + const projectManifest = await (project as PolywrapProject).getManifest(); if (!projectManifest || !projectManifest.resources) { return Promise.resolve(); diff --git a/packages/cli/src/lib/helpers/wrap.ts b/packages/cli/src/lib/helpers/wrap.ts index 8522f869d2..f96ed3f0fa 100644 --- a/packages/cli/src/lib/helpers/wrap.ts +++ b/packages/cli/src/lib/helpers/wrap.ts @@ -10,10 +10,16 @@ import { } from "@polywrap/wrap-manifest-types-js"; import { normalizePath, writeFileSync } from "@polywrap/os-js"; +export const supportedWrapTypes: WrapManifest["type"][] = [ + "interface", + "wasm", + "plugin" +]; + const run = async ( abi: WrapAbi, name: string, - type: "interface" | "wasm" | "plugin", + type: WrapManifest["type"], path: string ): Promise => { const manifest: WrapManifest = { @@ -31,10 +37,16 @@ const run = async ( export const generateWrapFile = async ( abi: WrapAbi, name: string, - type: "interface" | "wasm" | "plugin", + type: string, path: string, logger: Logger ): Promise => { + if (supportedWrapTypes.indexOf(type as WrapManifest["type"]) === -1) { + throw Error(intlMsg.lib_helpers_wrap_unsupportedType({ type })); + } + + const wrapType = type as WrapManifest["type"]; + const relativePath = displayPath(path); return await logActivity( logger, @@ -48,7 +60,7 @@ export const generateWrapFile = async ( path: normalizePath(relativePath), }), async (): Promise => { - await run(abi, name, type, path); + await run(abi, name, wrapType, path); } ); }; From fe10e6a643e54e9caca4f59bd17e982f0f23414e Mon Sep 17 00:00:00 2001 From: dOrgJelli Date: Tue, 3 Jan 2023 01:50:03 -0500 Subject: [PATCH 27/29] lint fix --- packages/cli/src/commands/build.ts | 8 ++++---- packages/cli/src/lib/Compiler.ts | 10 ++++++---- packages/cli/src/lib/helpers/wrap.ts | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index eb692727aa..f77fc33b75 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -220,7 +220,7 @@ async function run(options: BuildCommandOptions) { project, client, }); - + if (codegen) { const codeGenerator = new CodeGenerator({ project, @@ -228,20 +228,20 @@ async function run(options: BuildCommandOptions) { codegenDirAbs: codegenDir, }); const codegenSuccess = await codeGenerator.generate(); - + if (!codegenSuccess) { logger.error(intlMsg.commands_build_error_codegen_failed()); return false; } } - + const compiler = new Compiler({ project: project as PolywrapProject, outputDir, schemaComposer, buildStrategy, }); - + return await compiler.compile(); } catch (err) { logger.error(err.message); diff --git a/packages/cli/src/lib/Compiler.ts b/packages/cli/src/lib/Compiler.ts index a5c8442385..463d303e67 100644 --- a/packages/cli/src/lib/Compiler.ts +++ b/packages/cli/src/lib/Compiler.ts @@ -78,11 +78,13 @@ export class Compiler { throw Error(intlMsg.lib_compiler_missingBuildStrategy()); } - if (!await this._isWasm()) { + if (!(await this._isWasm())) { const manifest = await project.getManifest(); - throw Error(intlMsg.lib_compiler_cannotBuildModule({ - project: manifest.project.type - })); + throw Error( + intlMsg.lib_compiler_cannotBuildModule({ + project: manifest.project.type, + }) + ); } // Build the sources diff --git a/packages/cli/src/lib/helpers/wrap.ts b/packages/cli/src/lib/helpers/wrap.ts index f96ed3f0fa..946a087080 100644 --- a/packages/cli/src/lib/helpers/wrap.ts +++ b/packages/cli/src/lib/helpers/wrap.ts @@ -13,7 +13,7 @@ import { normalizePath, writeFileSync } from "@polywrap/os-js"; export const supportedWrapTypes: WrapManifest["type"][] = [ "interface", "wasm", - "plugin" + "plugin", ]; const run = async ( From 966a6e65109d162bb4f3437a23ee45679caaca58 Mon Sep 17 00:00:00 2001 From: Pileks Date: Tue, 3 Jan 2023 14:57:48 +0100 Subject: [PATCH 28/29] change array.indexOf to includes --- packages/cli/src/lib/helpers/wrap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/lib/helpers/wrap.ts b/packages/cli/src/lib/helpers/wrap.ts index 946a087080..5af8df3d07 100644 --- a/packages/cli/src/lib/helpers/wrap.ts +++ b/packages/cli/src/lib/helpers/wrap.ts @@ -41,7 +41,7 @@ export const generateWrapFile = async ( path: string, logger: Logger ): Promise => { - if (supportedWrapTypes.indexOf(type as WrapManifest["type"]) === -1) { + if (!supportedWrapTypes.includes(type as WrapManifest["type"])) { throw Error(intlMsg.lib_helpers_wrap_unsupportedType({ type })); } From 593339101f05d1bded3d19c48bb8008941d91b17 Mon Sep 17 00:00:00 2001 From: Pileks Date: Tue, 3 Jan 2023 17:12:10 +0100 Subject: [PATCH 29/29] Update README --- packages/cli/README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index f532089401..3fe727cd16 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -65,8 +65,11 @@ polywrap codegen --help ### `build | b` Build Wasm and Interface Polywrap projects. + This outputs the project's ABI schema (Wasm and Interface) and binary package (Wasm) into the `./build` directory. +Currently, `build` can be run for Wasm, Plugin and Interface projects. + #### Options - `-m, --manifest-file ` Specify your project's manifest file. @@ -82,9 +85,9 @@ This outputs the project's ABI schema (Wasm and Interface) and binary package (W - `--wrapper-envs ` Configure wrapper environment values using the provided file. -- `-n, --no-codegen` - Don't perform codegen before building. - By default, `build` performs a `codegen` step before building your Project. This option skips this step. This is especially useful when you are testing manual changes to your types/bindings. +- `--codegen` + Perform codegen before building. + By default, `build` doesn't perform a `codegen` step before building your Project. This option includes this step. This is especially useful when used in conjunction with the `--watch` option. - `-s, --strategy ` Specify which build strategy to use. By default, the `vm` build strategy is used. @@ -102,6 +105,8 @@ Generate code bindings for Polywrap projects. This command generates types and bindings for your project based on your project's schema (found in `schema.graphql`). +Currently, `codegen` can be run for App, Plugin and Wasm projects. + #### Options - `-m, --manifest-file ` Specify your project's manifest file. @@ -125,10 +130,6 @@ This command generates types and bindings for your project based on your project - `--wrapper-envs ` Configure wrapper environment values using the provided file. -#### Special note - -When running `codegen` for Plugin Projects, the Polywrap CLI will also output an ABI schema for your plugin into the `./build` directory. You can override this output directory by specifying `-p, --publish-dir `. - ### `create | c` Create a Polywrap project.