Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
"rebuild": "npm run clean && node-gyp -j 16 rebuild",
"rebuild:dev": "npm run clean && node-gyp -j 16 rebuild --debug",
"generate-messages": "node scripts/generate_messages.js",
"generate-messages:dev": "node scripts/generate_messages.js --debug",
"generate-messages:dev": "node scripts/generate_messages.js --debug && npx --yes prettier --ignore-path --write generated/**/*.js",
"generate-tsd-messages": "node scripts/generate_tsd.js",
"clean": "node-gyp clean && npx rimraf@6.0.1 ./generated",
"clean": "node-gyp clean && npx rimraf ./generated",
"install": "npm run rebuild",
"postinstall": "npm run generate-messages",
"docs": "cd docs && make",
"test": "nyc node --expose-gc ./scripts/run_test.js && npx tsd",
"test": "nyc node --expose-gc ./scripts/run_test.js && tsd",
"lint": "eslint && node ./scripts/cpplint.js",
"format": "clang-format -i -style=file ./src/*.cpp ./src/*.hpp && prettier --write \"{lib,rosidl_gen,rostsd_gen,rosidl_parser,types,example,test,scripts,benchmark,rostsd_gen}/**/*.{js,md,ts}\" ./*.{js,md,ts}",
"format": "clang-format -i -style=file ./src/*.cpp ./src/*.hpp && npx --yes prettier --write \"{lib,rosidl_gen,rostsd_gen,rosidl_parser,types,example,test,scripts,benchmark,rostsd_gen}/**/*.{js,md,ts}\" ./*.{js,md,ts}",
"prepare": "husky",
"coverage": "cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js"
},
Expand Down Expand Up @@ -62,6 +62,7 @@
"lint-staged": "^15.2.10",
"mocha": "^11.0.2",
"nyc": "^17.1.0",
"rimraf": "^6.0.1",
"sinon": "^19.0.2",
"tree-kill": "^1.2.2",
"tsd": "^0.31.2",
Expand All @@ -79,7 +80,7 @@
"is-close": "^1.3.3",
"json-bigint": "^1.0.0",
"nan": "^2.22.0",
"prettier": "^3.4.2",
"terser": "^5.39.0",
"walk": "^2.3.15"
},
"husky": {
Expand Down
59 changes: 26 additions & 33 deletions rosidl_gen/idl_generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
'use strict';

const dot = require('dot');
const prettier = require('prettier');
const { minify } = require('terser');
const fse = require('fs-extra');
const path = require('path');
const parser = require('../rosidl_parser/rosidl_parser.js');
Expand All @@ -29,10 +29,6 @@ const dots = dot.process({
path: path.join(__dirname, '../rosidl_gen/templates'),
});

function removeEmptyLines(str) {
return str.replace(/^\s*\n/gm, '');
}

/**
* Output generated code to disk. Do not overwrite
* an existing file. If file already exists do nothing.
Expand All @@ -41,11 +37,18 @@ function removeEmptyLines(str) {
* @param {string} code
*/
async function writeGeneratedCode(dir, fileName, code) {
if (fileName.endsWith('.js')) {
code = await prettier.format(code, { parser: 'babel' });
let result = null;
if (!isDebug && fileName.endsWith('.js')) {
try {
result = await minify(code);
} catch (error) {
console.error(`Error minifying ${fileName}:`, error);
result = null;
}
}

await fse.mkdirs(dir);
await fse.writeFile(path.join(dir, fileName), code);
await fse.writeFile(path.join(dir, fileName), result ? result.code : code);
}

async function generateServiceJSStruct(
Expand All @@ -61,9 +64,7 @@ async function generateServiceJSStruct(
'__' +
serviceInfo.interfaceName +
'.js';
const generatedSrvCode = removeEmptyLines(
dots.service({ serviceInfo: serviceInfo })
);
const generatedSrvCode = dots.service({ serviceInfo: serviceInfo });

// We are going to only generate the service JavaScript file if it meets one
// of the followings:
Expand All @@ -84,9 +85,7 @@ async function generateServiceJSStruct(

async function generateServiceEventMsg(serviceInfo, dir) {
const fileName = serviceInfo.interfaceName + '.msg';
const generatedEvent = removeEmptyLines(
dots.service_event({ serviceInfo: serviceInfo })
);
const generatedEvent = dots.service_event({ serviceInfo: serviceInfo });

return writeGeneratedCode(dir, fileName, generatedEvent).then(() => {
serviceInfo.interfaceName += '_Event';
Expand Down Expand Up @@ -119,14 +118,12 @@ async function generateServiceEventJSStruct(msgInfo, dir) {
// const AddTwoInts_RequestWrapper = require('../../generated/example_interfaces/example_interfaces__srv__AddTwoInts_Request.js');
// const AddTwoInts_ResponseWrapper = require('../../generated/example_interfaces/example_interfaces__srv__AddTwoInts_Response.js');
msgInfo.isServiceEvent = true;
const generatedCode = removeEmptyLines(
dots.message({
messageInfo: msgInfo,
spec: spec,
json: JSON.stringify(spec, null, ' '),
isDebug: isDebug,
})
);
const generatedCode = dots.message({
messageInfo: msgInfo,
spec: spec,
json: JSON.stringify(spec, null, ' '),
isDebug: isDebug,
});

return writeGeneratedCode(dir, eventFileName, generatedCode);
}
Expand All @@ -149,14 +146,12 @@ function generateMessageJSStructFromSpec(messageInfo, dir, spec) {
spec.msgName +
'.js';

const generatedCode = removeEmptyLines(
dots.message({
messageInfo: messageInfo,
spec: spec,
json: JSON.stringify(spec, null, ' '),
isDebug: isDebug,
})
);
const generatedCode = dots.message({
messageInfo: messageInfo,
spec: spec,
json: JSON.stringify(spec, null, ' '),
isDebug: isDebug,
});
return writeGeneratedCode(dir, fileName, generatedCode);
}

Expand Down Expand Up @@ -291,9 +286,7 @@ async function generateActionJSStruct(actionInfo, dir) {
'__' +
actionInfo.interfaceName +
'.js';
const generatedCode = removeEmptyLines(
dots.action({ actionInfo: actionInfo })
);
const generatedCode = dots.action({ actionInfo: actionInfo });
dir = path.join(dir, actionInfo.pkgName);
const action = writeGeneratedCode(dir, fileName, generatedCode);

Expand Down
Loading