or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.mdjavascript-evaluation.mdpackage-management.mdtranspilers.mdwebassets.md

webassets.mddocs/

0

# WebAssets Integration

1

2

Filter classes for integrating JavaScript transpilation into WebAssets asset pipeline, supporting automatic compilation of CoffeeScript, ES6+, TypeScript, JSX, and LESS in web applications.

3

4

## Package Information

5

6

WebAssets integration requires the optional webassets dependency:

7

8

```bash

9

pip install dukpy[webassets]

10

# or

11

pip install dukpy webassets

12

```

13

14

## Core Imports

15

16

```python

17

from webassets.filter import register_filter

18

from dukpy.webassets import BabelJS, TypeScript, CompileLess, BabelJSX

19

```

20

21

## Basic Usage

22

23

```python

24

from webassets import Bundle, Environment

25

from webassets.filter import register_filter

26

from dukpy.webassets import BabelJS, TypeScript, CompileLess, BabelJSX

27

28

# Register DukPy filters

29

register_filter(BabelJS)

30

register_filter(TypeScript)

31

register_filter(CompileLess)

32

register_filter(BabelJSX)

33

34

# Create WebAssets environment

35

env = Environment('./static', './static/compiled')

36

37

# Create bundles with DukPy filters

38

js_bundle = Bundle(

39

'js/app.js',

40

'js/components/*.js',

41

filters='babeljs',

42

output='compiled/app.js'

43

)

44

45

tsx_bundle = Bundle(

46

'tsx/main.tsx',

47

'tsx/components/*.tsx',

48

filters='typescript',

49

output='compiled/main.js'

50

)

51

52

css_bundle = Bundle(

53

'less/styles.less',

54

'less/components/*.less',

55

filters='lessc',

56

output='compiled/styles.css'

57

)

58

59

env.register('js', js_bundle)

60

env.register('tsx', tsx_bundle)

61

env.register('css', css_bundle)

62

```

63

64

## Capabilities

65

66

### ES6+ Babel Filter

67

68

Compiles modern JavaScript to ES5 for browser compatibility using the same Babel engine as `babel_compile()`.

69

70

```python { .api }

71

class BabelJS(Filter):

72

"""

73

WebAssets filter for ES6+ compilation using BabelJS.

74

75

Filter name: 'babeljs'

76

77

Options:

78

- BABEL_MODULES_LOADER: Module system ('systemjs', 'umd', or default CommonJS)

79

80

Attributes:

81

- max_debug_level: None (no debug level restrictions)

82

"""

83

84

name = 'babeljs'

85

max_debug_level = None

86

options = {

87

'loader': 'BABEL_MODULES_LOADER'

88

}

89

90

def input(self, _in, out, **kw):

91

"""

92

Process input file through Babel compilation.

93

94

Parameters:

95

- _in: Input file stream

96

- out: Output file stream

97

- **kw: Additional context including source_path

98

"""

99

```

100

101

Configuration and usage:

102

103

```python

104

from webassets import Bundle

105

from webassets.filter import register_filter

106

from dukpy.webassets import BabelJS

107

108

register_filter(BabelJS)

109

110

# Default CommonJS modules

111

bundle = Bundle(

112

'js/src/*.js',

113

filters='babeljs',

114

output='js/compiled.js'

115

)

116

117

# SystemJS modules

118

import os

119

os.environ['BABEL_MODULES_LOADER'] = 'systemjs'

120

bundle = Bundle(

121

'js/src/*.js',

122

filters='babeljs',

123

output='js/compiled.js'

124

)

125

126

# UMD modules

127

os.environ['BABEL_MODULES_LOADER'] = 'umd'

128

bundle = Bundle(

129

'js/src/*.js',

130

filters='babeljs',

131

output='js/compiled.js'

132

)

133

```

134

135

### TypeScript Filter

136

137

Compiles TypeScript files to JavaScript using the same TypeScript compiler as `typescript_compile()`.

138

139

```python { .api }

140

class TypeScript(Filter):

141

"""

142

WebAssets filter for TypeScript compilation.

143

144

Filter name: 'typescript'

145

146

Uses fixed compiler options:

147

- Module format: SystemJS

148

- Target: ES5

149

- Requires SystemJS runtime for browser usage

150

151

Attributes:

152

- max_debug_level: None (no debug level restrictions)

153

"""

154

155

name = 'typescript'

156

max_debug_level = None

157

158

def input(self, _in, out, **kw):

159

"""

160

Process input file through TypeScript compilation.

161

162

Parameters:

163

- _in: Input file stream

164

- out: Output file stream

165

- **kw: Additional context including source_path

166

"""

167

```

168

169

Usage example:

170

171

```python

172

from webassets import Bundle

173

from webassets.filter import register_filter

174

from dukpy.webassets import TypeScript

175

176

register_filter(TypeScript)

177

178

typescript_bundle = Bundle(

179

'ts/app.ts',

180

'ts/components/*.ts',

181

filters='typescript',

182

output='js/app.js'

183

)

184

```

185

186

### LESS CSS Filter

187

188

Compiles LESS stylesheets to CSS using the same LESS compiler as `less_compile()`.

189

190

```python { .api }

191

class CompileLess(Filter):

192

"""

193

WebAssets filter for LESS compilation.

194

195

Filter name: 'lessc'

196

197

Options:

198

- LIBSASS_INCLUDES: Additional include paths for LESS @import resolution (reused environment variable name)

199

200

Attributes:

201

- max_debug_level: None (no debug level restrictions)

202

"""

203

204

name = 'lessc'

205

max_debug_level = None

206

options = {

207

'less_includes': option('LIBSASS_INCLUDES', type=list)

208

}

209

210

def input(self, _in, out, **kw):

211

"""

212

Process input file through LESS compilation.

213

214

Parameters:

215

- _in: Input file stream

216

- out: Output file stream

217

- **kw: Additional context including source_path

218

219

Automatically adds source file directory to include paths.

220

"""

221

```

222

223

Usage example:

224

225

```python

226

from webassets import Bundle

227

from webassets.filter import register_filter

228

from dukpy.webassets import CompileLess

229

import os

230

231

register_filter(CompileLess)

232

233

# Basic LESS compilation

234

less_bundle = Bundle(

235

'less/main.less',

236

'less/components/*.less',

237

filters='lessc',

238

output='css/styles.css'

239

)

240

241

# With custom include paths

242

os.environ['LIBSASS_INCLUDES'] = 'less/mixins:less/variables:node_modules'

243

less_bundle_with_includes = Bundle(

244

'less/app.less',

245

filters='lessc',

246

output='css/app.css'

247

)

248

```

249

250

### JSX React Filter

251

252

Compiles JSX to React-compatible JavaScript using the same JSX compiler as `jsx_compile()`.

253

254

```python { .api }

255

class BabelJSX(Filter):

256

"""

257

WebAssets filter for JSX compilation using BabelJS with React presets.

258

259

Filter name: 'babeljsx'

260

261

Options:

262

- BABEL_MODULES_LOADER: Module system ('systemjs', 'umd', or default CommonJS)

263

264

Automatically configures Babel with ['es2015', 'react'] presets.

265

"""

266

267

name = 'babeljsx'

268

options = {

269

'loader': 'BABEL_MODULES_LOADER'

270

}

271

272

def input(self, _in, out, **kw):

273

"""

274

Process input file through JSX compilation.

275

276

Parameters:

277

- _in: Input file stream

278

- out: Output file stream

279

- **kw: Additional context including source_path

280

"""

281

```

282

283

Usage example:

284

285

```python

286

from webassets import Bundle

287

from webassets.filter import register_filter

288

from dukpy.webassets import BabelJSX

289

290

register_filter(BabelJSX)

291

292

jsx_bundle = Bundle(

293

'jsx/app.jsx',

294

'jsx/components/*.jsx',

295

filters='babeljsx',

296

output='js/react-app.js'

297

)

298

```

299

300

## Complete Integration Example

301

302

```python

303

from webassets import Bundle, Environment

304

from webassets.filter import register_filter

305

from dukpy.webassets import BabelJS, TypeScript, CompileLess, BabelJSX

306

import os

307

308

# Register all DukPy filters

309

register_filter(BabelJS)

310

register_filter(TypeScript)

311

register_filter(CompileLess)

312

register_filter(BabelJSX)

313

314

# Configure environment variables

315

os.environ['BABEL_MODULES_LOADER'] = 'umd'

316

os.environ['LIBSASS_INCLUDES'] = 'assets/less/mixins:assets/less/variables'

317

318

# Create WebAssets environment

319

env = Environment(

320

directory='./assets',

321

url='/static/',

322

load_path=['./assets']

323

)

324

325

# JavaScript bundles

326

modern_js = Bundle(

327

'js/modern/*.js',

328

filters='babeljs',

329

output='compiled/modern.js'

330

)

331

332

react_components = Bundle(

333

'jsx/components/*.jsx',

334

'jsx/app.jsx',

335

filters='babeljsx',

336

output='compiled/react-app.js'

337

)

338

339

typescript_app = Bundle(

340

'ts/main.ts',

341

'ts/services/*.ts',

342

'ts/components/*.ts',

343

filters='typescript',

344

output='compiled/typescript-app.js'

345

)

346

347

# CSS bundles

348

styles = Bundle(

349

'less/main.less',

350

'less/components/*.less',

351

filters='lessc',

352

output='compiled/styles.css'

353

)

354

355

# Register bundles

356

env.register('modern_js', modern_js)

357

env.register('react', react_components)

358

env.register('typescript', typescript_app)

359

env.register('styles', styles)

360

361

# Build assets

362

modern_js.build()

363

react_components.build()

364

typescript_app.build()

365

styles.build()

366

```

367

368

## Browser Runtime Requirements

369

370

### BabelJS and BabelJSX

371

- Requires babel-polyfill for full ES6+ feature support

372

- SystemJS or UMD builds require appropriate module loaders

373

374

### TypeScript

375

- Compiled output uses SystemJS modules

376

- Requires SystemJS runtime: https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.24/system.js

377

378

### React JSX

379

- Requires React runtime library

380

- Babel polyfill recommended for ES6+ features

381

382

## Configuration Options

383

384

All filters support WebAssets' standard configuration through environment variables:

385

386

```python

387

import os

388

389

# Configure Babel module format

390

os.environ['BABEL_MODULES_LOADER'] = 'systemjs' # or 'umd'

391

392

# Configure LESS include paths

393

os.environ['LIBSASS_INCLUDES'] = 'path1:path2:path3'

394

395

# Multiple paths on Windows

396

os.environ['LIBSASS_INCLUDES'] = 'path1;path2;path3'

397

```

398

399

## Error Handling

400

401

WebAssets filters will raise the underlying DukPy exceptions during compilation:

402

403

- `JSRuntimeError`: JavaScript/TypeScript compilation errors

404

- `LessCompilerError`: LESS compilation errors

405

406

These errors will be caught by WebAssets and reported as build failures with detailed error messages.