diff --git a/packages/labs/src/grpc_web/change_import_style.js b/packages/labs/src/grpc_web/change_import_style.js index f1a285d93e..e9c0e753b6 100644 --- a/packages/labs/src/grpc_web/change_import_style.js +++ b/packages/labs/src/grpc_web/change_import_style.js @@ -13,6 +13,7 @@ */ const minimist = require('minimist'); const fs = require('fs'); +const path = require('path'); function main() { const args = minimist(process.argv.slice(2)); @@ -119,20 +120,36 @@ function convertToESM(args, initialContents) { const replaceRequiresWithImports = (contents) => { return contents .replace( - /var ([\w\d_]+) = require\((['"][\.\\]*[\w\d@/_-]+['"])\)/g, 'import * as $1 from $2') + /var ([\w\d_]+) = require\(['"]([\.\\]*[\w\d@/_-]+)['"]\)/g, + (_, variable, importPath) => { + if (importPath.startsWith(args.workspace_name)) { + importPath = `./${path.relative(args.input_base_path, importPath)}`; + } + return `import * as ${variable} from '${importPath}';` + }) .replace( - /([\.\w\d_]+) = require\((['"][\.\w\d@/_-]+['"])\)/g, (_, variable, importPath) => { + /([\.\w\d_]+) = require\(['"]([\.\w\d@/_-]+)['"]\)/g, (_, variable, importPath) => { + if (importPath.startsWith(args.workspace_name)) { + importPath = `./${path.relative(args.input_base_path, importPath)}`; + } + const normalizedVariable = variable.replace(/\./g, '_'); - return `import * as ${normalizedVariable} from ${importPath};\n${variable} = {...${ + return `import * as ${normalizedVariable} from '${importPath}';\n${variable} = {...${ normalizedVariable}}`; }); }; - const replaceRequiresWithSubpackageImports = (contents) => { - return contents.replace( - /var ([\w\d_]+) = require\((['"][\w\d@/_-]+['"])\)\.([\w\d_]+);/g, - 'import * as $1 from $2;'); - }; + const replaceRequiresWithSubpackageImports = + (contents) => { + return contents.replace( + /var ([\w\d_]+) = require\(['"]([\w\d@/_-]+)['"]\)\.([\w\d_]+);/g, + (_, variable, importPath) => { + if (importPath.startsWith(args.workspace_name)) { + importPath = `./${path.relative(args.input_base_path, importPath)}`; + } + return `import * as ${variable} from '${importPath}';` + }); + } const replaceCJSExportsWithECMAExports = (contents) => { return contents.replace(/exports\.([\w\d_]+) = .*;/g, 'export { $1 };'); diff --git a/packages/labs/test/grpc_web/BUILD.bazel b/packages/labs/test/grpc_web/BUILD.bazel index f993f91121..c0df73e520 100644 --- a/packages/labs/test/grpc_web/BUILD.bazel +++ b/packages/labs/test/grpc_web/BUILD.bazel @@ -81,11 +81,8 @@ karma_web_test_suite( rollup_bundle( name = "test_es6_bundling", config_file = "rollup.config.js", - entry_points = { - ":test_bundling.ts": "index", - }, + entry_point = ":test_bundling.ts", format = "cjs", - output_dir = True, deps = [ ":test_bundling_lib", "@npm//rollup-plugin-commonjs", @@ -105,12 +102,22 @@ ts_library( ], ) +ts_library( + name = "rollup_test_lib", + testonly = 1, + srcs = ["rollup_test.spec.ts"], + deps = [ + "@npm//@types/jasmine", + "@npm//@types/node", + ], +) + jasmine_node_test( name = "rollup_test", - srcs = [ - ":rollup_test.spec.js", - ], data = [ ":test_es6_bundling", ], + deps = [ + ":rollup_test_lib", + ], ) diff --git a/packages/labs/test/grpc_web/commonjs_test.spec.ts b/packages/labs/test/grpc_web/commonjs_test.spec.ts index e49d23e71c..1ae0fbf68f 100644 --- a/packages/labs/test/grpc_web/commonjs_test.spec.ts +++ b/packages/labs/test/grpc_web/commonjs_test.spec.ts @@ -1,5 +1,5 @@ -import deliveryPersonPb = require('build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/common/delivery_person_pb'); -import {PizzaServiceClient} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/pizza_service_grpc_web_pb'; +import deliveryPersonPb = require('./proto/common/delivery_person_pb'); +import {PizzaServiceClient} from './proto/pizza_service_grpc_web_pb'; describe('CommonJs', () => { it('Loads imports using require()', () => { diff --git a/packages/labs/test/grpc_web/pizza_service_proto_test.spec.ts b/packages/labs/test/grpc_web/pizza_service_proto_test.spec.ts index 9fa649a54f..183b846443 100644 --- a/packages/labs/test/grpc_web/pizza_service_proto_test.spec.ts +++ b/packages/labs/test/grpc_web/pizza_service_proto_test.spec.ts @@ -1,8 +1,8 @@ import 'google-protobuf'; -import {Pizza, PizzaSize} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/common/pizza_pb'; -import {PizzaServiceClient} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/pizza_service_grpc_web_pb'; -import {OrderPizzaRequest, OrderPizzaResponse} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/pizza_service_pb'; +import {Pizza, PizzaSize} from './proto/common/pizza_pb'; +import {PizzaServiceClient} from './proto/pizza_service_grpc_web_pb'; +import {OrderPizzaRequest, OrderPizzaResponse} from './proto/pizza_service_pb'; declare function require(module: string): any; @@ -27,8 +27,7 @@ describe('DeliveryPerson', () => { }); it('delivery_person_ts_proto is included since it is a transitive dependency', () => { - const PROTOS = require( - 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/common/delivery_person_pb'); + const PROTOS = require('./proto/common/delivery_person_pb'); const DeliveryPerson = PROTOS.DeliveryPerson; const pizza = new Pizza(); pizza.setSize(PizzaSize.PIZZA_SIZE_LARGE); diff --git a/packages/labs/test/grpc_web/rollup_test.spec.js b/packages/labs/test/grpc_web/rollup_test.spec.ts similarity index 82% rename from packages/labs/test/grpc_web/rollup_test.spec.js rename to packages/labs/test/grpc_web/rollup_test.spec.ts index ae0bf36661..1ee2d9a58d 100644 --- a/packages/labs/test/grpc_web/rollup_test.spec.js +++ b/packages/labs/test/grpc_web/rollup_test.spec.ts @@ -1,16 +1,14 @@ const grpcWeb = require('grpc-web'); grpcWeb.MethodType = { - UNARY: 'unary' + UNARY: 'unary', }; -const bundle = require('build_bazel_rules_nodejs/packages/labs/test/grpc_web/test_es6_bundling/'); +const bundle = require('./test_es6_bundling'); describe('Rollup', () => { it('should define Pizza with protobuf API', () => { expect(bundle.Pizza).toBeDefined(); - const pizza = new bundle.Pizza(); pizza.setSize(bundle.PizzaSize.PIZZA_SIZE_LARGE); - expect(pizza.getSize()).toBe(bundle.PizzaSize.PIZZA_SIZE_LARGE); expect(Array.isArray(pizza.getToppingIdsList())).toBe(true); }); diff --git a/packages/labs/test/grpc_web/test_bundling.ts b/packages/labs/test/grpc_web/test_bundling.ts index f8cb156b0b..96aafb885f 100644 --- a/packages/labs/test/grpc_web/test_bundling.ts +++ b/packages/labs/test/grpc_web/test_bundling.ts @@ -1,2 +1,2 @@ -export {DeliveryPerson} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/common/delivery_person_pb'; -export {Pizza, PizzaSize} from 'build_bazel_rules_nodejs/packages/labs/test/grpc_web/proto/common/pizza_pb'; +export {DeliveryPerson} from './proto/common/delivery_person_pb'; +export {Pizza, PizzaSize} from './proto/common/pizza_pb';