From b6b5d9b9b16dc1ddec6560de3abe5e36da90f442 Mon Sep 17 00:00:00 2001 From: Igor Yanchynskyi <59307393+Icorcka@users.noreply.github.com> Date: Tue, 12 May 2026 11:55:37 +0300 Subject: [PATCH 1/3] version3.3.0: Add optional ts support --- lib/webpack.config.coffee | 30 ++++++++++++++++++++++++------ package.json | 10 +++++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/webpack.config.coffee b/lib/webpack.config.coffee index ff11e17..e64c30d 100644 --- a/lib/webpack.config.coffee +++ b/lib/webpack.config.coffee @@ -21,13 +21,20 @@ sveltePreprocess = filename: input.filename code: code.replace /\$_/g, '$:' -babel = +makeBabel = (typescript = false) -> + presets = [ + require.resolve('@babel/preset-env') + require.resolve('@babel/preset-react') + ] + if typescript + try + presets.push require.resolve('@babel/preset-typescript') + catch + console.warn 'zeropack2: typescript enabled but @babel/preset-typescript not found. Install it: npm i -D @babel/preset-typescript' + loader: 'babel-loader' options: - presets: [ - require.resolve('@babel/preset-env') - require.resolve('@babel/preset-react') - ] + presets: presets plugins: [ require.resolve('babel-plugin-add-module-exports') require.resolve('@babel/plugin-transform-modules-commonjs') @@ -56,16 +63,26 @@ module.exports = (builderCmd, builderEnv, builderDir) -> implementation: builderConfig.sassImplementation || 'node-sass' sassOptions: builderConfig.sassOptions || {} + # TypeScript support — enabled when builderConfig.typescript is truthy + useTypescript = !!builderConfig.typescript + babel = makeBabel(useTypescript) + + tsRule = if useTypescript + [{test: /\.tsx?$/, exclude: /node_modules/, use: [thread, babel]}] + else [] + # Svelte support — enabled when builderConfig.svelte is set svelteRule = if builderConfig.svelte svelteOpts = Object.assign {dev: mode == 'development', preprocess: sveltePreprocess}, builderConfig.svelte [{test: /\.svelte$/, use: {loader: 'svelte-loader', options: svelteOpts}}] else [] - # Extensions — auto-add svelte-related when svelte is enabled + # Extensions — auto-add based on enabled features defaultExtensions = ['.coffee', '.js', '.cjsx'] if builderConfig.svelte defaultExtensions = ['.mjs', '.js', '.svelte', '.coffee'] + if useTypescript + defaultExtensions = defaultExtensions.concat ['.ts', '.tsx'] extensions = builderConfig.extensions || defaultExtensions # Main fields — auto-add 'svelte' when svelte is enabled @@ -97,6 +114,7 @@ module.exports = (builderCmd, builderEnv, builderDir) -> module: rules: [ ...svelteRule + ...tsRule ...(builderConfig.extraRules || []) { test: /\.scss$/ diff --git a/package.json b/package.json index c95f406..38358e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zeropack2", - "version": "3.2.0", + "version": "3.3.0", "description": "", "main": "bin/zeropack", "scripts": { @@ -35,11 +35,15 @@ "peerDependencies": { "sass": "^1.0.0", "sass-embedded": "*", - "node-sass": "^7.0.0 || ^8.0.0 || ^9.0.0" + "node-sass": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@babel/preset-typescript": "^7.24.0", + "typescript": ">=4.0.0" }, "peerDependenciesMeta": { "sass": { "optional": true }, "sass-embedded": { "optional": true }, - "node-sass": { "optional": true } + "node-sass": { "optional": true }, + "@babel/preset-typescript": { "optional": true }, + "typescript": { "optional": true } } } From 3a032b73adaee2d25e850a3edbe2377d3e518e73 Mon Sep 17 00:00:00 2001 From: Igor Yanchynskyi <59307393+Icorcka@users.noreply.github.com> Date: Tue, 12 May 2026 13:44:31 +0300 Subject: [PATCH 2/3] Update webpack.config.coffee --- lib/webpack.config.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/webpack.config.coffee b/lib/webpack.config.coffee index e64c30d..5cf0a59 100644 --- a/lib/webpack.config.coffee +++ b/lib/webpack.config.coffee @@ -21,14 +21,14 @@ sveltePreprocess = filename: input.filename code: code.replace /\$_/g, '$:' -makeBabel = (typescript = false) -> +makeBabel = (typescript = false, prjPath = '') -> presets = [ require.resolve('@babel/preset-env') require.resolve('@babel/preset-react') ] if typescript try - presets.push require.resolve('@babel/preset-typescript') + presets.push require.resolve('@babel/preset-typescript', { paths: [prjPath] }) catch console.warn 'zeropack2: typescript enabled but @babel/preset-typescript not found. Install it: npm i -D @babel/preset-typescript' @@ -65,7 +65,7 @@ module.exports = (builderCmd, builderEnv, builderDir) -> # TypeScript support — enabled when builderConfig.typescript is truthy useTypescript = !!builderConfig.typescript - babel = makeBabel(useTypescript) + babel = makeBabel(useTypescript, prjPath) tsRule = if useTypescript [{test: /\.tsx?$/, exclude: /node_modules/, use: [thread, babel]}] From df1a7345cddbb2a2e637cd9e44de51392fd61546 Mon Sep 17 00:00:00 2001 From: Igor Yanchynskyi <59307393+Icorcka@users.noreply.github.com> Date: Thu, 21 May 2026 17:02:56 +0300 Subject: [PATCH 3/3] Making ts not optional --- lib/webpack.config.coffee | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/lib/webpack.config.coffee b/lib/webpack.config.coffee index 5cf0a59..eaea4bd 100644 --- a/lib/webpack.config.coffee +++ b/lib/webpack.config.coffee @@ -21,16 +21,15 @@ sveltePreprocess = filename: input.filename code: code.replace /\$_/g, '$:' -makeBabel = (typescript = false, prjPath = '') -> +makeBabel = (prjPath = '') -> presets = [ require.resolve('@babel/preset-env') require.resolve('@babel/preset-react') ] - if typescript - try - presets.push require.resolve('@babel/preset-typescript', { paths: [prjPath] }) - catch - console.warn 'zeropack2: typescript enabled but @babel/preset-typescript not found. Install it: npm i -D @babel/preset-typescript' + try + presets.push require.resolve('@babel/preset-typescript', { paths: [prjPath] }) + catch + # @babel/preset-typescript is optional — .ts/.tsx files won't compile without it loader: 'babel-loader' options: @@ -63,13 +62,9 @@ module.exports = (builderCmd, builderEnv, builderDir) -> implementation: builderConfig.sassImplementation || 'node-sass' sassOptions: builderConfig.sassOptions || {} - # TypeScript support — enabled when builderConfig.typescript is truthy - useTypescript = !!builderConfig.typescript - babel = makeBabel(useTypescript, prjPath) + babel = makeBabel(prjPath) - tsRule = if useTypescript - [{test: /\.tsx?$/, exclude: /node_modules/, use: [thread, babel]}] - else [] + tsRule = [{test: /\.tsx?$/, exclude: /node_modules/, use: [thread, babel]}] # Svelte support — enabled when builderConfig.svelte is set svelteRule = if builderConfig.svelte @@ -78,11 +73,9 @@ module.exports = (builderCmd, builderEnv, builderDir) -> else [] # Extensions — auto-add based on enabled features - defaultExtensions = ['.coffee', '.js', '.cjsx'] + defaultExtensions = ['.coffee', '.js', '.cjsx', '.ts', '.tsx'] if builderConfig.svelte - defaultExtensions = ['.mjs', '.js', '.svelte', '.coffee'] - if useTypescript - defaultExtensions = defaultExtensions.concat ['.ts', '.tsx'] + defaultExtensions = ['.mjs', '.js', '.svelte', '.coffee', '.ts', '.tsx'] extensions = builderConfig.extensions || defaultExtensions # Main fields — auto-add 'svelte' when svelte is enabled