mirror of https://github.com/nocodb/nocodb
Browse Source
* chore: build to rspack and swc * wip: rspack * fix: rspack with hmr for local dev * fix: pino pretty in local dev * fix: moved all local dev config * fix: add missing dependencies * fix: unit tests ci * fix: add tsconfig type checking * fix: ignore watch node_modules * fix: rspack build * feat: add type checker * fix: swagger tests * fix: gtihub actions * fix: do not remove nocodb-sdk * fix: build workflow * fix: update rspack config * fix: rspack config sync * fix: rspack sync * fix: update configs * fix: build config * fix: sync rspack config * fix: bump rspack version * fix: rspack local not workingpull/9964/head
Anbarasu
1 week ago
committed by
GitHub
36 changed files with 2232 additions and 917 deletions
@ -0,0 +1,80 @@
|
||||
const path = require('path'); |
||||
const { rspack } = require('@rspack/core'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
module.exports = { |
||||
entry: './src/run/dockerEntry.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.node$/, |
||||
loader: 'node-loader', |
||||
options: { |
||||
name: '[path][name].[ext]', |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
loader: 'builtin:swc-loader', |
||||
options: { |
||||
jsc: { |
||||
parser: { |
||||
syntax: 'typescript', |
||||
tsx: true, |
||||
decorators: true, |
||||
dynamicImport: true, |
||||
}, |
||||
transform: { |
||||
legacyDecorator: true, |
||||
decoratorMetadata: true, |
||||
}, |
||||
target: 'es2017', |
||||
}, |
||||
module: { |
||||
type: 'commonjs', |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
tsConfig: { |
||||
configFile: path.resolve('tsconfig.json'), |
||||
}, |
||||
}, |
||||
output: { |
||||
path: path.resolve('./docker'), |
||||
filename: 'main.js', |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new rspack.SwcJsMinimizerRspackPlugin({ |
||||
minimizerOptions: { |
||||
compress: { |
||||
keep_classnames: true, |
||||
}, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
plugins: [ |
||||
new rspack.EnvironmentPlugin({ |
||||
EE: true, |
||||
}), |
||||
], |
||||
target: 'node', |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
}; |
@ -1,51 +0,0 @@
|
||||
const path = require('path'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const webpack = require('webpack'); |
||||
const TerserPlugin = require('terser-webpack-plugin'); |
||||
const { resolveTsAliases } = require('../build-utils/resolveTsAliases'); |
||||
|
||||
module.exports = { |
||||
entry: './src/run/dockerEntry.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'ts-loader', |
||||
options: { |
||||
transpileOnly: true, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
alias: resolveTsAliases(path.resolve('tsconfig.json')), |
||||
}, |
||||
output: { |
||||
path: require('path').resolve('./docker'), |
||||
filename: 'main.js', |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
terserOptions: { |
||||
keep_classnames: true, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [nodeExternals()], |
||||
plugins: [new webpack.EnvironmentPlugin(['EE'])], |
||||
target: 'node', |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
}; |
@ -0,0 +1,94 @@
|
||||
const { resolve, } = require('path'); |
||||
const { rspack } = require('@rspack/core'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
|
||||
module.exports = { |
||||
entry: './src/cli.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.node$/, |
||||
loader: 'node-loader', |
||||
options: { |
||||
name: '[path][name].[ext]', |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
loader: 'builtin:swc-loader', |
||||
options: { |
||||
sourceMap: false, |
||||
jsc: { |
||||
parser: { |
||||
syntax: 'typescript', |
||||
tsx: true, |
||||
decorators: true, |
||||
dynamicImport: true, |
||||
}, |
||||
transform: { |
||||
legacyDecorator: true, |
||||
decoratorMetadata: true, |
||||
}, |
||||
target: 'es2017', |
||||
loose: true, |
||||
externalHelpers: false, |
||||
keepClassNames: true, |
||||
}, |
||||
module: { |
||||
type: 'commonjs', |
||||
strict: false, |
||||
strictMode: true, |
||||
lazy: false, |
||||
noInterop: false, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
optimization: { |
||||
minimize: true, |
||||
minimizer: [ |
||||
new rspack.SwcJsMinimizerRspackPlugin({ |
||||
minimizerOptions: { |
||||
format: { |
||||
comments: false, |
||||
}, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
tsConfig: { |
||||
configFile: resolve('tsconfig.json'), |
||||
}, |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'cli.js', |
||||
path: resolve(__dirname, '..', 'nc-secret-mgr', 'src/nocodb'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new rspack.EnvironmentPlugin({ |
||||
EE: true, |
||||
}), |
||||
new rspack.BannerPlugin({ |
||||
banner: 'This is a generated file. Do not edit', |
||||
entryOnly: true, |
||||
}), |
||||
], |
||||
target: 'node', |
||||
}; |
@ -0,0 +1,100 @@
|
||||
const { resolve } = require('path'); |
||||
const { rspack } = require('@rspack/core'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); |
||||
|
||||
module.exports = { |
||||
entry: './src/index.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.node$/, |
||||
loader: 'node-loader', |
||||
options: { |
||||
name: '[path][name].[ext]', |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
loader: 'builtin:swc-loader', |
||||
options: { |
||||
sourceMap: false, |
||||
jsc: { |
||||
parser: { |
||||
syntax: 'typescript', |
||||
tsx: true, |
||||
decorators: true, |
||||
dynamicImport: true, |
||||
}, |
||||
transform: { |
||||
legacyDecorator: true, |
||||
decoratorMetadata: true, |
||||
}, |
||||
target: 'es2017', |
||||
loose: true, |
||||
externalHelpers: false, |
||||
keepClassNames: true, |
||||
}, |
||||
module: { |
||||
type: 'commonjs', |
||||
strict: false, |
||||
strictMode: true, |
||||
lazy: false, |
||||
noInterop: false, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new rspack.SwcJsMinimizerRspackPlugin({ |
||||
minimizerOptions: { |
||||
compress: { |
||||
keep_classnames: true, |
||||
}, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json', '.node'], |
||||
tsConfig: { |
||||
configFile: resolve('tsconfig.json'), |
||||
}, |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'bundle.js', |
||||
path: resolve(__dirname, 'dist'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new rspack.EnvironmentPlugin({ |
||||
EE: true, |
||||
}), |
||||
new rspack.CopyRspackPlugin({ |
||||
patterns: [{ from: 'src/public', to: 'public' }], |
||||
}), |
||||
new ForkTsCheckerWebpackPlugin({ |
||||
typescript: { |
||||
configFile: resolve('tsconfig.json'), |
||||
}, |
||||
}) |
||||
], |
||||
target: 'node', |
||||
}; |
@ -0,0 +1,105 @@
|
||||
const { join, resolve } = require('path'); |
||||
const { rspack } = require('@rspack/core'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin'); |
||||
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); |
||||
|
||||
const baseDevConfig = { |
||||
mode: 'development', |
||||
target: 'node', |
||||
devtool: 'eval-source-map', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.node$/, |
||||
loader: 'node-loader', |
||||
options: { |
||||
name: '[path][name].[ext]', |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
loader: 'builtin:swc-loader', |
||||
options: { |
||||
sourceMap: true, |
||||
jsc: { |
||||
parser: { |
||||
syntax: 'typescript', |
||||
tsx: true, |
||||
decorators: true, |
||||
dynamicImport: true, |
||||
}, |
||||
transform: { |
||||
legacyDecorator: true, |
||||
decoratorMetadata: true, |
||||
}, |
||||
target: 'es2017', |
||||
loose: true, |
||||
externalHelpers: false, |
||||
keepClassNames: true, |
||||
}, |
||||
module: { |
||||
type: 'commonjs', |
||||
strict: false, |
||||
strictMode: true, |
||||
lazy: false, |
||||
noInterop: false, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['webpack/hot/poll?1000'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
tsConfig: { |
||||
configFile: resolve('tsconfig.json'), |
||||
}, |
||||
extensions: ['.tsx', '.ts', '.js', '.json', '.node'], |
||||
}, |
||||
optimization: { |
||||
minimize: false, |
||||
nodeEnv: false, |
||||
}, |
||||
plugins: [ |
||||
new rspack.EnvironmentPlugin({ |
||||
EE: true, |
||||
NODE_ENV: 'development', |
||||
}), |
||||
new RunScriptWebpackPlugin({ |
||||
name: 'main.js', |
||||
}), |
||||
new rspack.CopyRspackPlugin({ |
||||
patterns: [{ from: 'src/public', to: 'public' }], |
||||
}), |
||||
new ForkTsCheckerWebpackPlugin({ |
||||
typescript: { |
||||
configFile: join('tsconfig.json'), |
||||
}, |
||||
}), |
||||
], |
||||
output: { |
||||
path: join(__dirname, 'dist'), |
||||
filename: 'main.js', |
||||
library: { |
||||
type: 'commonjs2', |
||||
}, |
||||
clean: true, |
||||
}, |
||||
devServer: { |
||||
devMiddleware: { |
||||
writeToDisk: true, |
||||
}, |
||||
port: 9001, |
||||
}, |
||||
watchOptions: { |
||||
ignored: /node_modules/, |
||||
poll: true, |
||||
}, |
||||
}; |
||||
|
||||
module.exports = baseDevConfig; |
@ -0,0 +1,94 @@
|
||||
const path = require('path'); |
||||
const { rspack } = require('@rspack/core'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
|
||||
module.exports = { |
||||
entry: './src/run/timely.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.node$/, |
||||
loader: 'node-loader', |
||||
options: { |
||||
name: '[path][name].[ext]', |
||||
}, |
||||
}, |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
loader: 'builtin:swc-loader', |
||||
options: { |
||||
sourceMap: false, |
||||
jsc: { |
||||
parser: { |
||||
syntax: 'typescript', |
||||
tsx: true, |
||||
decorators: true, |
||||
dynamicImport: true, |
||||
}, |
||||
transform: { |
||||
legacyDecorator: true, |
||||
decoratorMetadata: true, |
||||
}, |
||||
target: 'es2017', |
||||
loose: true, |
||||
externalHelpers: false, |
||||
keepClassNames: true, |
||||
}, |
||||
module: { |
||||
type: 'commonjs', |
||||
strict: false, |
||||
strictMode: true, |
||||
lazy: false, |
||||
noInterop: false, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new rspack.SwcJsMinimizerRspackPlugin({ |
||||
minimizerOptions: { |
||||
compress: { |
||||
keep_classnames: true, |
||||
}, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json', '.node'], |
||||
tsConfig: { |
||||
configFile: path.resolve('tsconfig.json'), |
||||
}, |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'main.js', |
||||
path: path.resolve(__dirname, 'docker'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new rspack.EnvironmentPlugin({ |
||||
EE: true, |
||||
}), |
||||
new rspack.CopyRspackPlugin({ |
||||
patterns: [{ from: 'src/public', to: 'public' }], |
||||
}), |
||||
], |
||||
target: 'node', |
||||
}; |
@ -1,61 +0,0 @@
|
||||
const path = require('path'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const webpack = require('webpack'); |
||||
const TerserPlugin = require('terser-webpack-plugin'); |
||||
const { resolveTsAliases } = require('./build-utils/resolveTsAliases'); |
||||
|
||||
module.exports = { |
||||
entry: './src/cli.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'ts-loader', |
||||
options: { |
||||
transpileOnly: true, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, |
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
extractComments: false, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
alias: resolveTsAliases(path.resolve('tsconfig.json')), |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'cli.js', |
||||
path: path.resolve(__dirname, '..', 'nc-secret-mgr', 'src/nocodb'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new webpack.EnvironmentPlugin(['EE']), |
||||
new webpack.BannerPlugin({ |
||||
banner: 'This is a generated file. Do not edit', |
||||
entryOnly:true |
||||
}), |
||||
], |
||||
target: 'node', |
||||
}; |
@ -1,60 +0,0 @@
|
||||
const path = require('path'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const webpack = require('webpack'); |
||||
const CopyPlugin = require('copy-webpack-plugin'); |
||||
const TerserPlugin = require('terser-webpack-plugin'); |
||||
const { resolveTsAliases } = require('./build-utils/resolveTsAliases'); |
||||
|
||||
module.exports = { |
||||
entry: './src/index.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'ts-loader', |
||||
options: { |
||||
transpileOnly: true, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
terserOptions: { |
||||
keep_classnames: true, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [nodeExternals()], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
alias: resolveTsAliases(path.resolve('tsconfig.json')), |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'bundle.js', |
||||
path: path.resolve(__dirname, 'dist'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new webpack.EnvironmentPlugin(['EE']), |
||||
new CopyPlugin({ |
||||
patterns: [{ from: 'src/public', to: 'public' }], |
||||
}), |
||||
], |
||||
|
||||
target: 'node', |
||||
}; |
@ -1,59 +0,0 @@
|
||||
const path = require('path'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const webpack = require('webpack'); |
||||
const TerserPlugin = require('terser-webpack-plugin'); |
||||
const { resolveTsAliases } = require('./build-utils/resolveTsAliases'); |
||||
|
||||
module.exports = { |
||||
entry: './src/run/local.ts', |
||||
// devtool: 'inline-source-map',
|
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'ts-loader', |
||||
options: { |
||||
transpileOnly: true, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [ |
||||
new TerserPlugin({ |
||||
terserOptions: { |
||||
keep_classnames: true, |
||||
}, |
||||
}), |
||||
], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
alias: resolveTsAliases(path.resolve('tsconfig.json')), |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'main.js', |
||||
path: path.resolve(__dirname, 'docker'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [new webpack.EnvironmentPlugin(['EE'])], |
||||
|
||||
target: 'node', |
||||
}; |
@ -1,57 +0,0 @@
|
||||
const path = require('path'); |
||||
const nodeExternals = require('webpack-node-externals'); |
||||
const webpack = require('webpack'); |
||||
const CopyPlugin = require('copy-webpack-plugin'); |
||||
const TerserPlugin = require('terser-webpack-plugin'); |
||||
const { resolveTsAliases } = require('./build-utils/resolveTsAliases'); |
||||
|
||||
module.exports = { |
||||
entry: './src/run/timely.ts', |
||||
module: { |
||||
rules: [ |
||||
{ |
||||
test: /\.tsx?$/, |
||||
exclude: /node_modules/, |
||||
use: { |
||||
loader: 'ts-loader', |
||||
options: { |
||||
transpileOnly: true, |
||||
}, |
||||
}, |
||||
}, |
||||
], |
||||
}, |
||||
|
||||
optimization: { |
||||
minimize: true, //Update this to true or false
|
||||
minimizer: [new TerserPlugin()], |
||||
nodeEnv: false, |
||||
}, |
||||
externals: [ |
||||
nodeExternals({ |
||||
allowlist: ['nocodb-sdk'], |
||||
}), |
||||
], |
||||
resolve: { |
||||
extensions: ['.tsx', '.ts', '.js', '.json'], |
||||
alias: resolveTsAliases(path.resolve('./tsconfig.json')), |
||||
}, |
||||
mode: 'production', |
||||
output: { |
||||
filename: 'main.js', |
||||
path: path.resolve(__dirname, 'docker'), |
||||
library: 'libs', |
||||
libraryTarget: 'umd', |
||||
globalObject: "typeof self !== 'undefined' ? self : this", |
||||
}, |
||||
node: { |
||||
__dirname: false, |
||||
}, |
||||
plugins: [ |
||||
new webpack.EnvironmentPlugin(['EE']), |
||||
new CopyPlugin({ |
||||
patterns: [{ from: 'src/public', to: 'public' }], |
||||
}), |
||||
], |
||||
target: 'node', |
||||
}; |
Loading…
Reference in new issue