feat: source-ref support rollup

pull/81/head
moonrailgun 3 years ago
parent b8e2c2bae5
commit 003925895b

@ -20,7 +20,8 @@
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": [
"acorn"
"acorn",
"acorn-dynamic-import"
]
}
},

@ -3,12 +3,13 @@ import traverse from '@babel/traverse';
import generate from '@babel/generator';
import template from '@babel/template';
import type { Comment } from '@babel/types';
import { program } from '@babel/types';
import fs from 'fs-extra';
import _ from 'lodash';
const babelPlugins: ParserPlugin[] = ['jsx', 'typescript'];
const buildNamedExport = template('export function %%name%%(): any', {
plugins: babelPlugins as any,
plugins: babelPlugins,
});
interface Options {
@ -26,10 +27,7 @@ export async function generateFunctionDeclare(options: Options) {
});
});
const code = generate({
type: 'Program',
body: _.flatten(astList),
} as any).code;
const code = generate(program(_.flatten(astList))).code;
return code;
}

@ -0,0 +1 @@
## source-ref for webpack loader

@ -0,0 +1,37 @@
{
"name": "rollup-plugin-source-ref",
"version": "1.0.0",
"description": "",
"main": "dist/index.js",
"files": [
"dist"
],
"scripts": {
"build": "tsc",
"prepare": "tsc"
},
"keywords": [
"sourcecode",
"pointer",
"webpack"
],
"author": "moonrailgun",
"license": "MIT",
"devDependencies": {
"@types/babel__generator": "^7.6.4",
"@types/babel__traverse": "^7.17.1",
"@types/node": "^15.12.5",
"@types/webpack": "^5.28.0",
"rollup": "^2.75.0",
"ts-node": "^10.0.0",
"typescript": "^4.5.2",
"webpack": "^5.72.0",
"webpack-test-utils": "^1.1.0"
},
"dependencies": {
"@babel/generator": "^7.17.7",
"@babel/parser": "^7.17.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.10"
}
}

@ -0,0 +1,56 @@
import type { Plugin } from 'rollup';
import { parse } from '@babel/parser';
import traverse from '@babel/traverse';
import generate from '@babel/generator';
import { jsxAttribute, jsxIdentifier, stringLiteral } from '@babel/types';
const TRACE_ID = 'data-source';
export default function sourceRef(): Plugin {
return {
name: 'source-ref',
transform(code, id) {
const filepath = id;
const ast = parse(code, {
sourceType: 'module',
plugins: ['jsx', 'typescript'],
});
traverse(ast, {
JSXOpeningElement(path) {
const location = path.node.loc;
if (!location) {
return;
}
if (Array.isArray(location)) {
return;
}
const line = location.start.line;
const col = location.start.column;
const attrs = path.node.attributes;
for (let i = 0; i < attrs.length; i++) {
const attr = attrs[i];
if (attr.type === 'JSXAttribute' && attr.name.name === TRACE_ID) {
// existed
return;
}
}
const traceId = `${filepath}:${line}:${col}`;
attrs.push(
jsxAttribute(jsxIdentifier(TRACE_ID), stringLiteral(traceId))
);
},
});
const res = generate(ast);
return { code: res.code, map: res.map };
},
};
}

@ -0,0 +1,14 @@
{
"compilerOptions": {
"outDir": "dist",
"module": "commonjs",
"target": "ES5",
"lib": ["ESNext"],
"declaration": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src"]
}

@ -156,6 +156,37 @@ importers:
'@types/node': 15.14.9
ts-node: 10.7.0_ixcth6kbstn6no7hiktnzckliq
packages/rollup-plugin-source-ref:
specifiers:
'@babel/generator': ^7.17.7
'@babel/parser': ^7.17.7
'@babel/traverse': ^7.17.3
'@babel/types': ^7.17.10
'@types/babel__generator': ^7.6.4
'@types/babel__traverse': ^7.17.1
'@types/node': ^15.12.5
'@types/webpack': ^5.28.0
rollup: ^2.75.0
ts-node: ^10.0.0
typescript: ^4.5.2
webpack: ^5.72.0
webpack-test-utils: ^1.1.0
dependencies:
'@babel/generator': 7.17.10
'@babel/parser': 7.17.10
'@babel/traverse': 7.17.10
'@babel/types': 7.17.10
devDependencies:
'@types/babel__generator': 7.6.4
'@types/babel__traverse': 7.17.1
'@types/node': 15.14.9
'@types/webpack': 5.28.0
rollup: 2.75.0
ts-node: 10.7.0_ixcth6kbstn6no7hiktnzckliq
typescript: 4.6.4
webpack: 5.72.1
webpack-test-utils: 1.1.0_webpack@5.72.1
packages/source-ref-loader:
specifiers:
'@babel/generator': ^7.17.7
@ -316,6 +347,7 @@ importers:
rimraf: ^3.0.2
rollup-plugin-copy: ^3.4.0
rollup-plugin-replace: ^2.2.0
rollup-plugin-source-ref: workspace:^1.0.0
socket.io-client: ^4.1.2
source-ref-loader: workspace:^1.0.0
source-ref-open-vscode: workspace:^1.0.0
@ -422,6 +454,7 @@ importers:
rimraf: 3.0.2
rollup-plugin-copy: 3.4.0
rollup-plugin-replace: 2.2.0
rollup-plugin-source-ref: link:../packages/rollup-plugin-source-ref
source-ref-loader: link:../packages/source-ref-loader
style-loader: 3.3.1_webpack@5.72.1
tailchat-plugin-declaration-generator: link:../packages/plugin-declaration-generator
@ -2221,14 +2254,12 @@ packages:
/@cspotcode/source-map-consumer/0.8.0:
resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==}
engines: {node: '>= 12'}
dev: true
/@cspotcode/source-map-support/0.7.0:
resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==}
engines: {node: '>=12'}
dependencies:
'@cspotcode/source-map-consumer': 0.8.0
dev: true
/@ctrl/tinycolor/3.4.1:
resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==}
@ -4414,19 +4445,15 @@ packages:
/@tsconfig/node10/1.0.8:
resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==}
dev: true
/@tsconfig/node12/1.0.9:
resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==}
dev: true
/@tsconfig/node14/1.0.1:
resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==}
dev: true
/@tsconfig/node16/1.0.2:
resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
dev: true
/@types/aria-query/4.2.2:
resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==}
@ -4727,7 +4754,6 @@ packages:
/@types/node/15.14.9:
resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==}
dev: true
/@types/node/17.0.4:
resolution: {integrity: sha512-6xwbrW4JJiJLgF+zNypN5wr2ykM9/jHcL7rQ8fZe2vuftggjzZeRSM4OwRc6Xk8qWjwJ99qVHo/JgOGmomWRog==}
@ -5570,7 +5596,6 @@ packages:
/acorn-walk/8.2.0:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
engines: {node: '>=0.4.0'}
dev: true
/acorn/6.4.2:
resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
@ -5587,7 +5612,6 @@ packages:
resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/address/1.2.0:
resolution: {integrity: sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==}
@ -5864,7 +5888,6 @@ packages:
/arg/4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
dev: true
/arg/5.0.1:
resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==}
@ -6059,7 +6082,6 @@ packages:
picocolors: 1.0.0
postcss: 8.4.13
postcss-value-parser: 4.2.0
dev: true
/autoprefixer/9.8.8:
resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==}
@ -6395,6 +6417,7 @@ packages:
/bindings/1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
requiresBuild: true
dependencies:
file-uri-to-path: 1.0.0
dev: true
@ -7535,7 +7558,6 @@ packages:
/create-require/1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: true
/cross-env/7.0.3:
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
@ -8057,7 +8079,6 @@ packages:
/diff/4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
dev: true
/diffie-hellman/5.0.3:
resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==}
@ -9279,6 +9300,7 @@ packages:
/file-uri-to-path/1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
requiresBuild: true
dev: true
optional: true
@ -9507,7 +9529,6 @@ packages:
/fraction.js/4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: true
/fragment-cache/0.2.1:
resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
@ -12226,7 +12247,6 @@ packages:
/make-error/1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
dev: true
/makeerror/1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
@ -12744,6 +12764,7 @@ packages:
/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
requiresBuild: true
dev: true
optional: true
@ -12927,7 +12948,6 @@ packages:
/normalize-range/0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
dev: true
/normalize-url/3.3.0:
resolution: {integrity: sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==}
@ -15888,6 +15908,14 @@ packages:
optionalDependencies:
fsevents: 2.3.2
/rollup/2.75.0:
resolution: {integrity: sha512-1/wxtweHJ7YwI2AIK3ZgCBU3nbW8sLnBIFwN46cwOTnVzt8f1o6J8zPKjwoiuADvzSjmnLqJce31p0q2vQ+dqw==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/rsvp/4.8.5:
resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==}
engines: {node: 6.* || >= 7.*}
@ -17058,7 +17086,7 @@ packages:
serialize-javascript: 6.0.0
source-map: 0.6.1
terser: 5.13.1
webpack: 5.72.1
webpack: 5.72.1_webpack-cli@4.9.2
dev: true
/terser/4.8.0:
@ -17358,7 +17386,6 @@ packages:
typescript: 4.6.4
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: true
/ts-pnp/1.2.0_typescript@4.6.4:
resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==}
@ -17845,7 +17872,6 @@ packages:
/v8-compile-cache-lib/3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
dev: true
/v8-compile-cache/2.3.0:
resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
@ -18796,7 +18822,6 @@ packages:
/yn/3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
dev: true
/yocto-queue/0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}

@ -1,7 +1,10 @@
const copy = require('rollup-plugin-copy');
const replace = require('rollup-plugin-replace');
const sourceRef = require('rollup-plugin-source-ref').default;
const path = require('path');
const isDev = process.env.NODE_ENV === 'development';
module.exports = {
externalDeps: [
'react',
@ -40,4 +43,14 @@ module.exports = {
'process.env.NODE_ENV': JSON.stringify('production'),
}),
],
buildRollupPlugins(plugins) {
if (isDev) {
return [
sourceRef(), // make sure to change to source
...plugins,
];
}
return plugins;
},
};

@ -7,7 +7,7 @@
"license": "GPLv3",
"private": true,
"scripts": {
"build": "rimraf ./dist && pnpm plugins:all && pnpm build:webpack",
"build": "cross-env NODE_ENV=production rimraf ./dist && pnpm plugins:all && pnpm build:webpack",
"build:webpack": "cross-env TS_NODE_PROJECT='tsconfig.node.json' webpack --config ./build/webpack.config.ts",
"build:stats": "pnpm build:webpack --profile --json=compilation-stats.json",
"dev": "cross-env TS_NODE_PROJECT='tsconfig.node.json' NODE_ENV=development webpack serve --config ./build/webpack.config.ts",
@ -108,6 +108,7 @@
"rimraf": "^3.0.2",
"rollup-plugin-copy": "^3.4.0",
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-source-ref": "workspace:^1.0.0",
"source-ref-loader": "workspace:^1.0.0",
"style-loader": "^3.0.0",
"tailchat-plugin-declaration-generator": "workspace:^1.0.0",

Loading…
Cancel
Save