diff --git a/CHANGELOG.md b/CHANGELOG.md index 711021ab71..2d820514bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,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-1432](https://github.com/polywrap/toolchain/pull/1432) `polywrap` CLI: * Remove the `polywrap.meta.yaml` manifest. * [PR-1436](https://github.com/polywrap/toolchain/pull/1436) `@polywrap/client-config-builder-js`: 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. diff --git a/packages/cli/lang/en.json b/packages/cli/lang/en.json index d1beaeaa18..2281a0c78f 100644 --- a/packages/cli/lang/en.json +++ b/packages/cli/lang/en.json @@ -9,6 +9,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", @@ -17,11 +18,13 @@ "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_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", "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", @@ -87,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", @@ -212,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}", @@ -251,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 d1beaeaa18..2281a0c78f 100644 --- a/packages/cli/lang/es.json +++ b/packages/cli/lang/es.json @@ -9,6 +9,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", @@ -17,11 +18,13 @@ "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_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", "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", @@ -87,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", @@ -212,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}", @@ -251,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/__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.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 b7d5090b1c..e5e8bbb8fe 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,9 +18,11 @@ Options: (default: ./build) -c, --client-config Add custom configuration to the PolywrapClient + --codegen Perform code generation before build + --codegen-dir Codegen output directory (default: + ./src/wrap) --wrapper-envs Path to a JSON file containing wrapper envs - -n, --no-codegen Skip code generation -s, --strategy Strategy to use for building the wrapper (default: "vm") -w, --watch Automatically rebuild when changes are @@ -89,25 +92,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"], @@ -176,7 +160,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, }); @@ -251,7 +235,7 @@ describe("e2e tests for build command", () => { 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, }); @@ -263,7 +247,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]; @@ -280,7 +264,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, }); 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 5380ca3710..d57b011a05 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..2d956f176a --- /dev/null +++ b/packages/cli/src/__tests__/e2e/helpers/testBuildOutput.ts @@ -0,0 +1,17 @@ +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))) { + fail(`Did not find expected file: ${path.join(buildDir, 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/__tests__/e2e/test.spec.ts b/packages/cli/src/__tests__/e2e/test.spec.ts index 8218b67916..c812bd7772 100644 --- a/packages/cli/src/__tests__/e2e/test.spec.ts +++ b/packages/cli/src/__tests__/e2e/test.spec.ts @@ -53,7 +53,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 4fb7c1c9d3..f77fc33b75 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, + polywrapManifestLanguages, + pluginManifestLanguages, parseWrapperEnvsOption, } from "../lib"; import { CodeGenerator } from "../lib/codegen"; @@ -23,8 +27,8 @@ import { DockerImageBuildStrategy, LocalBuildStrategy, } from "../lib/build-strategies"; +import { defaultCodegenDir } from "../lib/defaults/defaultCodegenDir"; -import path from "path"; import readline from "readline"; import { Env, PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; @@ -36,12 +40,18 @@ 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; configBuilder: IClientConfigBuilder; + codegen: boolean; // defaults to false + codegenDir: string; wrapperEnvs: Env[]; - codegen: boolean; // defaults to true watch?: boolean; strategy: SupportedStrategies; verbose?: boolean; @@ -71,11 +81,17 @@ 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( + `--codegen-dir`, + `${intlMsg.commands_build_options_codegen_dir({ + default: defaultCodegenDir, + })}` + ) .option( `--wrapper-envs <${intlMsg.commands_common_options_wrapperEnvsPath()}>`, `${intlMsg.commands_common_options_wrapperEnvs()}` ) - .option(`-n, --no-codegen`, `${intlMsg.commands_build_options_n()}`) .option( `-s, --strategy <${strategyStr}>`, `${intlMsg.commands_build_options_s()}`, @@ -98,6 +114,7 @@ export const build: Command = { configBuilder: await parseClientConfigOption(options.clientConfig), wrapperEnvs: await parseWrapperEnvsOption(options.wrapperEnvs), outputDir: parseDirOption(options.outputDir, defaultOutputDir), + codegenDir: parseDirOption(options.codegenDir, defaultCodegenDir), strategy: options.strategy, logFile: parseLogFileOption(options.logFile), }); @@ -149,6 +166,7 @@ async function run(options: BuildCommandOptions) { wrapperEnvs, strategy, codegen, + codegenDir, verbose, quiet, logFile, @@ -164,43 +182,71 @@ async function run(options: BuildCommandOptions) { noDefaults: true, }); - const project = new PolywrapProject({ - rootDir: path.dirname(manifestFile), - polywrapManifestPath: manifestFile, - logger, - }); + const project = await getProjectFromManifest(manifestFile, logger); + + if (!project) { + return; + } + await project.validate(); - const polywrapManifest = await project.getManifest(); - await validateManifestModules(polywrapManifest); + const manifest = await project.getManifest(); + const language = manifest.project.type; - const buildStrategy = createBuildStrategy(strategy, outputDir, project); + if (supportedProjectTypes.indexOf(language) === -1) { + logger.error( + intlMsg.commands_build_error_unsupportedProjectType({ + supportedTypes: supportedProjectTypes.join(", "), + }) + ); + process.exit(1); + } - const schemaComposer = new SchemaComposer({ - project, - client, - }); + let buildStrategy: BuildStrategy; - const execute = async (): Promise => { - const codeGenerator = codegen - ? new CodeGenerator({ project, schemaComposer }) - : undefined; + if (isPolywrapManifestLanguage(language)) { + await validateManifestModules(manifest as PolywrapManifest); - const compiler = new Compiler({ - project, + buildStrategy = createBuildStrategy( + strategy, outputDir, - schemaComposer, - buildStrategy, - codeGenerator, - }); + project as PolywrapProject + ); + } - const result = await compiler.compile(); + const execute = async (): Promise => { + try { + const schemaComposer = new SchemaComposer({ + project, + client, + }); - if (!result) { - return result; - } + if (codegen) { + const codeGenerator = new CodeGenerator({ + project, + schemaComposer, + codegenDirAbs: codegenDir, + }); + const codegenSuccess = await codeGenerator.generate(); - return true; + 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); + return false; + } }; if (!watch) { @@ -209,6 +255,8 @@ async function run(options: BuildCommandOptions) { if (!result) { process.exit(1); } + + process.exit(0); } else { // Execute await execute(); @@ -260,6 +308,4 @@ async function run(options: BuildCommandOptions) { }, }); } - - process.exit(0); } diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 22f1b24580..1b29c7e9a5 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -10,30 +10,23 @@ import { parseManifestFileOption, parseClientConfigOption, getProjectFromManifest, - isPluginManifestLanguage, - generateWrapFile, defaultProjectManifestFiles, defaultPolywrapManifest, parseLogFileOption, parseWrapperEnvsOption, } from "../lib"; 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 defaultCodegenDir = "./src/wrap"; -const defaultPublishDir = "./build"; - const pathStr = intlMsg.commands_codegen_options_o_path(); const defaultManifestStr = defaultPolywrapManifest.join(" | "); type CodegenCommandOptions = { manifestFile: string; codegenDir: string; - publishDir: string; script?: string; configBuilder: IClientConfigBuilder; wrapperEnvs: Env[]; @@ -60,12 +53,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()}` @@ -95,7 +82,6 @@ export const codegen: Command = { options.manifestFile, defaultProjectManifestFiles ), - publishDir: parseDirOption(options.publishDir, defaultPublishDir), logFile: parseLogFileOption(options.logFile), }); }); @@ -109,7 +95,6 @@ async function run(options: CodegenCommandOptions) { script, configBuilder, wrapperEnvs, - publishDir, verbose, quiet, logFile, @@ -128,11 +113,14 @@ 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 projectType = await project.getManifestLanguage(); - const schemaComposer = new SchemaComposer({ project, client, @@ -155,24 +143,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); diff --git a/packages/cli/src/lib/Compiler.ts b/packages/cli/src/lib/Compiler.ts index 264f1e7bb2..463d303e67 100644 --- a/packages/cli/src/lib/Compiler.ts +++ b/packages/cli/src/lib/Compiler.ts @@ -6,12 +6,12 @@ import { generateWrapFile, intlMsg, PolywrapProject, + PluginProject, resetDir, SchemaComposer, 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"; @@ -22,9 +22,8 @@ import path from "path"; export interface CompilerConfig { outputDir: string; - project: PolywrapProject; - codeGenerator?: CodeGenerator; - buildStrategy: BuildStrategy; + project: PolywrapProject | PluginProject; + buildStrategy?: BuildStrategy; schemaComposer: SchemaComposer; } @@ -32,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 @@ -41,18 +40,13 @@ export class Compiler { // Output: wrap.info await this._outputWrapManifest(); - if (!(await this._isInterface())) { - // Generate the bindings - if (codeGenerator) { - await codeGenerator.generate(); - } - - // Compile & Output: wrap.wasm + if (await this._isWasm()) { + // Build & Output: wasm.wrap await this._buildModules(); - } - // Copy: Resources folder - await this._copyResourcesFolder(); + // Copy: Resources folder + await this._copyResourcesFolder(); + } }; try { @@ -71,17 +65,26 @@ 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 @@ -97,7 +100,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, @@ -129,7 +132,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/defaults/defaultCodegenDir.ts b/packages/cli/src/lib/defaults/defaultCodegenDir.ts new file mode 100644 index 0000000000..585f99a287 --- /dev/null +++ b/packages/cli/src/lib/defaults/defaultCodegenDir.ts @@ -0,0 +1 @@ +export const defaultCodegenDir = "./src/wrap"; diff --git a/packages/cli/src/lib/helpers/wrap.ts b/packages/cli/src/lib/helpers/wrap.ts index 8522f869d2..5af8df3d07 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.includes(type as WrapManifest["type"])) { + 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); } ); }; diff --git a/packages/js/client/src/__tests__/core/sanity.spec.ts b/packages/js/client/src/__tests__/core/sanity.spec.ts index 5a3c026815..143a5455d8 100644 --- a/packages/js/client/src/__tests__/core/sanity.spec.ts +++ b/packages/js/client/src/__tests__/core/sanity.spec.ts @@ -71,7 +71,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(); @@ -104,7 +104,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, @@ -122,7 +122,7 @@ describe("sanity", () => { expect(result.ok).toBeTruthy() - await buildWrapper(modifiedFooPath); + await buildWrapper(modifiedFooPath, undefined, true); let redirectUri: IUriRedirect = { from: fooUri, to: modifiedFooUri 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 6e1ac8ad87..24bd14a186 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 Promise.all([ - buildWrapper(wrapperPath), - buildWrapper(simpleFsResolverWrapperPath), - buildWrapper(simpleRedirectResolverWrapperPath) + buildWrapper(wrapperPath, undefined, true), + buildWrapper(simpleFsResolverWrapperPath, undefined, true), + buildWrapper(simpleRedirectResolverWrapperPath, undefined, true) ]); }); 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 e3ce638d3c..19e194d410 100644 --- a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -17,7 +17,7 @@ const simpleWrapperUri = new Uri(`fs/${simpleWrapperPath}/build`); describe("wasm-wrapper", () => { beforeAll(async () => { - await buildWrapper(simpleWrapperPath); + await buildWrapper(simpleWrapperPath, 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/package.json b/packages/js/plugins/ethereum/package.json index 0429edea00..19dd59d0b8 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/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/plugins/ethereum/src/__tests__/e2e.spec.ts b/packages/js/plugins/ethereum/src/__tests__/e2e.spec.ts index 989c42aa59..9e6931b034 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/file-system/package.json b/packages/js/plugins/file-system/package.json index 2a5bba9f6f..3b5670cc3f 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 f707ca08d2..86492f83ec 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/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/ipfs/package.json b/packages/js/plugins/ipfs/package.json index c2e5891261..d1d4fbf75e 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/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/package.json b/packages/js/plugins/uri-resolvers/ens-resolver/package.json index 43e2dd9ec3..f1ffb0196d 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/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/package.json b/packages/js/plugins/uri-resolvers/file-system-resolver/package.json index b49fa61c6b..d0244847c6 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/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/package.json b/packages/js/plugins/uri-resolvers/http-resolver/package.json index 0ddc4a4de8..feef7a3d86 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/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/package.json b/packages/js/plugins/uri-resolvers/ipfs-resolver/package.json index f79fac1421..91b73e5a38 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/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/package.json b/packages/js/plugins/ws/package.json index f1e911a965..8b9e7753ce 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 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..2fc361a30f 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(() => { @@ -134,7 +134,7 @@ describe("e2e tests for WsPlugin", () => { }, 20); let t3 = setTimeout(() => { server.send("3"); - }, 30); + }, 50); const response = await client.invoke({ uri, 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 1ca2f6a320..4079a48a05 100644 --- a/packages/js/test-env/src/index.ts +++ b/packages/js/test-env/src/index.ts @@ -203,11 +203,31 @@ 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`; + + 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 { exitCode: buildExitCode, stdout: buildStdout, @@ -235,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; @@ -256,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( @@ -363,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`; @@ -380,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 () => { 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..6ef997bf99 --- /dev/null +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts @@ -0,0 +1,45 @@ +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"; + +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 configure(builder: IClientConfigBuilder): IClientConfigBuilder { + return builder.addPackage({ + 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/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 } 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 4284da99d7..0000000000 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/012-no-codegen/polywrap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -format: 0.3.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! -} 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