tranfi 0.0.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +395 -0
- package/app/assets/index-6quYZ5Ap.css +5 -0
- package/app/assets/index-pDFMluyz.js +160 -0
- package/app/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
- package/app/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
- package/app/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
- package/app/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
- package/app/index.html +13 -0
- package/binding.gyp +69 -0
- package/csrc/arena.c +91 -0
- package/csrc/batch.c +229 -0
- package/csrc/buffer.c +78 -0
- package/csrc/cJSON.c +3143 -0
- package/csrc/cJSON.h +300 -0
- package/csrc/codec_csv.c +1058 -0
- package/csrc/codec_jsonl.c +374 -0
- package/csrc/codec_table.c +218 -0
- package/csrc/codec_text.c +229 -0
- package/csrc/compiler.c +102 -0
- package/csrc/date_utils.h +94 -0
- package/csrc/dsl.c +1180 -0
- package/csrc/dsl.h +22 -0
- package/csrc/expr.c +1245 -0
- package/csrc/expr.h +56 -0
- package/csrc/internal.h +250 -0
- package/csrc/ir.c +119 -0
- package/csrc/ir.h +167 -0
- package/csrc/ir_schema.c +60 -0
- package/csrc/ir_serialize.c +104 -0
- package/csrc/ir_sql.c +1211 -0
- package/csrc/ir_validate.c +120 -0
- package/csrc/main.c +392 -0
- package/csrc/op_acf.c +133 -0
- package/csrc/op_anomaly.c +120 -0
- package/csrc/op_bin.c +109 -0
- package/csrc/op_cast.c +195 -0
- package/csrc/op_clip.c +88 -0
- package/csrc/op_date_trunc.c +181 -0
- package/csrc/op_datetime.c +212 -0
- package/csrc/op_derive.c +248 -0
- package/csrc/op_diff.c +134 -0
- package/csrc/op_ewma.c +103 -0
- package/csrc/op_explode.c +108 -0
- package/csrc/op_fill_down.c +163 -0
- package/csrc/op_fill_null.c +123 -0
- package/csrc/op_filter.c +132 -0
- package/csrc/op_frequency.c +193 -0
- package/csrc/op_grep.c +163 -0
- package/csrc/op_group_agg.c +285 -0
- package/csrc/op_hash.c +126 -0
- package/csrc/op_head.c +149 -0
- package/csrc/op_interpolate.c +239 -0
- package/csrc/op_join.c +384 -0
- package/csrc/op_label_encode.c +144 -0
- package/csrc/op_lead.c +190 -0
- package/csrc/op_normalize.c +226 -0
- package/csrc/op_onehot.c +185 -0
- package/csrc/op_pivot.c +370 -0
- package/csrc/op_registry.c +1148 -0
- package/csrc/op_rename.c +138 -0
- package/csrc/op_replace.c +202 -0
- package/csrc/op_sample.c +101 -0
- package/csrc/op_select.c +140 -0
- package/csrc/op_skip.c +152 -0
- package/csrc/op_sort.c +273 -0
- package/csrc/op_split.c +114 -0
- package/csrc/op_split_data.c +87 -0
- package/csrc/op_stack.c +315 -0
- package/csrc/op_stats.c +779 -0
- package/csrc/op_step.c +171 -0
- package/csrc/op_tail.c +96 -0
- package/csrc/op_top.c +150 -0
- package/csrc/op_trim.c +109 -0
- package/csrc/op_unique.c +300 -0
- package/csrc/op_unpivot.c +159 -0
- package/csrc/op_validate.c +71 -0
- package/csrc/op_window.c +150 -0
- package/csrc/pipeline.c +315 -0
- package/csrc/plan.c +206 -0
- package/csrc/recipes.c +102 -0
- package/csrc/recipes.h +27 -0
- package/csrc/report.c +463 -0
- package/csrc/report.h +22 -0
- package/csrc/tranfi.h +123 -0
- package/csrc/wasm_api.c +157 -0
- package/napi_api.c +326 -0
- package/package.json +46 -57
- package/src/cli.js +193 -0
- package/src/engines/duckdb.js +109 -0
- package/src/index.js +306 -0
- package/src/native.js +22 -0
- package/src/pipeline.js +286 -0
- package/src/server.js +277 -0
- package/src/wasm.js +19 -0
- package/wasm/index.js +244 -0
- package/wasm/package.json +1 -0
- package/wasm/tranfi_core.js +0 -0
- package/LICENSE +0 -21
- package/dist/bundle.js +0 -1
- package/index.html +0 -18
- package/logo.png +0 -0
- package/src/app.css +0 -160
- package/src/app.js +0 -203
- package/src/app.vue +0 -253
- package/src/bulma-input.vue +0 -110
- package/src/common-inputs.js +0 -28
- package/src/main.js +0 -18
- package/src/transforms.js +0 -166
- package/webpack.config.js +0 -108
package/src/bulma-input.vue
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="field" v-if="input.type == 'int' || input.type == 'float' || input.type == 'number'">
|
|
3
|
-
<label v-bind:for="input.name" class="is-size-7">{{ input.name }}</label>
|
|
4
|
-
<div class="control">
|
|
5
|
-
<input
|
|
6
|
-
v-model="input.value"
|
|
7
|
-
v-bind:id="input.name"
|
|
8
|
-
v-bind:step="input.type == 'int' ? 1 : 0.001"
|
|
9
|
-
v-bind:placeholder="input.placeholder ? input.placeholder : input.name"
|
|
10
|
-
v-bind:min="input.min"
|
|
11
|
-
v-bind:max="input.max"
|
|
12
|
-
v-on:change="changeHandler"
|
|
13
|
-
class="input"
|
|
14
|
-
type="number"
|
|
15
|
-
>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="field" v-if="input.type == 'string' || input.type == 'color'">
|
|
20
|
-
<label v-bind:for="input.name" class="is-size-7">{{ input.name }}</label>
|
|
21
|
-
<div class="control">
|
|
22
|
-
<input
|
|
23
|
-
v-model="input.value"
|
|
24
|
-
v-bind:id="input.name"
|
|
25
|
-
v-bind:placeholder="input.placeholder ? input.placeholder : input.name"
|
|
26
|
-
v-on:change="changeHandler"
|
|
27
|
-
class="input"
|
|
28
|
-
>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<div class="field" v-if="input.type == 'text'">
|
|
33
|
-
<label v-bind:for="input.name" class="is-size-7">{{ input.name }}</label>
|
|
34
|
-
<div class="control">
|
|
35
|
-
<textarea
|
|
36
|
-
v-model="input.value"
|
|
37
|
-
v-bind:id="input.name"
|
|
38
|
-
v-bind:placeholder="input.placeholder ? input.placeholder : input.name"
|
|
39
|
-
v-on:change="changeHandler"
|
|
40
|
-
class="textarea"
|
|
41
|
-
></textarea>
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
<div class="field" v-if="input.type == 'checkbox' || input.type == 'bool'">
|
|
46
|
-
<div class="control">
|
|
47
|
-
<label class="checkbox is-size-7">
|
|
48
|
-
<input
|
|
49
|
-
v-model="input.value"
|
|
50
|
-
v-bind:id="input.name"
|
|
51
|
-
v-on:change="changeHandler"
|
|
52
|
-
type="checkbox"
|
|
53
|
-
>
|
|
54
|
-
{{ input.name }}
|
|
55
|
-
</label>
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
|
|
59
|
-
<div class="field" v-if="input.type == 'categorical' || input.type == 'select'">
|
|
60
|
-
<label v-bind:for="input.name" class="is-size-7">{{ input.name }}</label>
|
|
61
|
-
<div class="control">
|
|
62
|
-
<div class="select is-fullwidth">
|
|
63
|
-
<select
|
|
64
|
-
v-model="input.value"
|
|
65
|
-
v-bind:id="input.name"
|
|
66
|
-
v-on:change="changeHandler"
|
|
67
|
-
>
|
|
68
|
-
<option
|
|
69
|
-
v-for="(option, oi) in input.options"
|
|
70
|
-
>{{ option }}</option>
|
|
71
|
-
</select>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
|
|
76
|
-
<div class="field" v-if="input.type == 'file'">
|
|
77
|
-
<label v-bind:for="input.name" class="is-size-7">{{ input.name }}</label>
|
|
78
|
-
<div class="control">
|
|
79
|
-
<div class="file has-name is-fullwidth" v-bind:class="{ 'is-primary': !input.file }">
|
|
80
|
-
<label class="file-label">
|
|
81
|
-
<input
|
|
82
|
-
v-bind:id="input.name"
|
|
83
|
-
v-on:change="loadFile"
|
|
84
|
-
class="file-input"
|
|
85
|
-
type="file"
|
|
86
|
-
>
|
|
87
|
-
<span class="file-cta">
|
|
88
|
-
<span class="file-label">
|
|
89
|
-
Open
|
|
90
|
-
</span>
|
|
91
|
-
</span>
|
|
92
|
-
<span class="file-name">
|
|
93
|
-
<span v-if="input.file && input.file.name">{{ input.file.name }}</span>
|
|
94
|
-
<span v-else>No file selected</span>
|
|
95
|
-
</span>
|
|
96
|
-
</label>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
|
|
101
|
-
<div class="field is-horizontal" v-if="input.type == 'group'">
|
|
102
|
-
<div class="field-body">
|
|
103
|
-
<vue-input v-for="(el, index) in input.elements" v-bind:input="el" ></vue-input>
|
|
104
|
-
</div>
|
|
105
|
-
</div>
|
|
106
|
-
</template>
|
|
107
|
-
|
|
108
|
-
<script>
|
|
109
|
-
export { component as default } from "./common-inputs.js"
|
|
110
|
-
</script>
|
package/src/common-inputs.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
const FileReader = window['FileReader']
|
|
2
|
-
|
|
3
|
-
const component = {
|
|
4
|
-
props: ['input'],
|
|
5
|
-
emits: ['inchange'],
|
|
6
|
-
methods: {
|
|
7
|
-
changeHandler () {
|
|
8
|
-
if (this.input.reactive) {
|
|
9
|
-
this.$emit('inchange')
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
loadFile (e) {
|
|
13
|
-
const reader = new FileReader()
|
|
14
|
-
this.input.file = e.target.files[0]
|
|
15
|
-
// reader.readAsText(this.input.file)
|
|
16
|
-
// reader.onload = () => {
|
|
17
|
-
// this.input.value = reader.result
|
|
18
|
-
// if (typeof this.input.cb !== 'undefined') {
|
|
19
|
-
// this.input.cb.run()
|
|
20
|
-
// } else if (this.input.reactive) {
|
|
21
|
-
// this.$emit('inchange')
|
|
22
|
-
// }
|
|
23
|
-
// }
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export { component }
|
package/src/main.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { createApp } from 'vue'
|
|
2
|
-
|
|
3
|
-
import App from './app.vue'
|
|
4
|
-
|
|
5
|
-
import Equal from 'equal-vue'
|
|
6
|
-
import 'equal-vue/dist/style.css'
|
|
7
|
-
|
|
8
|
-
import bulmaInput from './bulma-input.vue'
|
|
9
|
-
import draggable from 'vuedraggable'
|
|
10
|
-
|
|
11
|
-
const app = createApp(App)
|
|
12
|
-
app.use(Equal)
|
|
13
|
-
|
|
14
|
-
app.component('vue-input', bulmaInput)
|
|
15
|
-
app.component('draggable', draggable)
|
|
16
|
-
|
|
17
|
-
app.mount('#tranfi-container')
|
|
18
|
-
|
package/src/transforms.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
const ReadStream = require('filestream').read
|
|
2
|
-
const ParseStream = require('csv-parse')
|
|
3
|
-
const JSONStream = require('JSONStream')
|
|
4
|
-
const HTTPStream = require('stream-http')
|
|
5
|
-
const through2 = require('through2')
|
|
6
|
-
|
|
7
|
-
let FileLoader = class FileLoader {
|
|
8
|
-
static inputType = 'text'
|
|
9
|
-
|
|
10
|
-
static outputType = 'text'
|
|
11
|
-
|
|
12
|
-
static type = 'loader'
|
|
13
|
-
|
|
14
|
-
static initStream (params) {
|
|
15
|
-
const stream = new ReadStream(params['File'], {chunkSize: params['Chunk size']})
|
|
16
|
-
stream.setEncoding('utf8')
|
|
17
|
-
// if (params['Encoding'] === 'UTF-8') {}
|
|
18
|
-
return stream
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
constructor (id) {
|
|
22
|
-
this.name = this.constructor.name
|
|
23
|
-
this.inputs = [
|
|
24
|
-
{ name: 'File', type: 'file' },
|
|
25
|
-
// { name: 'Encoding', type: 'categorical', options: ['UTF-8', 'Buffer'], default: 'UTF-8' },
|
|
26
|
-
{ name: 'Chunk size', type: 'int', default: 10000 },
|
|
27
|
-
]
|
|
28
|
-
this.inputType = this.constructor.inputType
|
|
29
|
-
this.outputType = this.constructor.outputType
|
|
30
|
-
this.id = id
|
|
31
|
-
this.expanded = false
|
|
32
|
-
this.displayInputs = [0]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
let HTTPLoader = class HTTPLoader {
|
|
37
|
-
static inputType = 'text'
|
|
38
|
-
|
|
39
|
-
static outputType = 'text'
|
|
40
|
-
|
|
41
|
-
static type = 'loader'
|
|
42
|
-
|
|
43
|
-
static initStream (params) {
|
|
44
|
-
return new Promise((resolve, reject) => {
|
|
45
|
-
HTTPStream.get(params['URL'], function (stream) {
|
|
46
|
-
stream.setEncoding('utf8')
|
|
47
|
-
// if (params['Encoding'] === 'UTF-8') {}
|
|
48
|
-
// stream.setEncoding(params['Encoding'] === 'UTF-8' ? 'utf8' : 'buffer')
|
|
49
|
-
resolve(stream)
|
|
50
|
-
})
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
constructor (id) {
|
|
55
|
-
this.name = this.constructor.name
|
|
56
|
-
this.inputs = [
|
|
57
|
-
{ name: 'URL', type: 'string' },
|
|
58
|
-
// { name: 'Encoding', type: 'categorical', options: ['UTF-8', 'Buffer'], default: 'UTF-8' },
|
|
59
|
-
]
|
|
60
|
-
this.inputType = this.constructor.inputType
|
|
61
|
-
this.outputType = this.constructor.outputType
|
|
62
|
-
this.id = id
|
|
63
|
-
this.expanded = false
|
|
64
|
-
this.displayInputs = [0]
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
let CSVParser = class CSVParser {
|
|
69
|
-
static inputType = 'text'
|
|
70
|
-
|
|
71
|
-
static outputType = 'object'
|
|
72
|
-
|
|
73
|
-
static type = 'parser'
|
|
74
|
-
|
|
75
|
-
static initStream (params) {
|
|
76
|
-
const stream = ParseStream({
|
|
77
|
-
'delimiter': params['Delimiter'],
|
|
78
|
-
'cast': true,
|
|
79
|
-
'columns': true,
|
|
80
|
-
'comment': '#',
|
|
81
|
-
'trim': params['Trim'],
|
|
82
|
-
'relax_column_count': true,
|
|
83
|
-
'skip_empty_lines': params['Skip empty lines'],
|
|
84
|
-
'skip_lines_with_error': true
|
|
85
|
-
})
|
|
86
|
-
return stream
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
constructor (id) {
|
|
90
|
-
this.name = this.constructor.name
|
|
91
|
-
this.inputs = [
|
|
92
|
-
{ name: 'Delimiter', type: 'string', default: ',' },
|
|
93
|
-
{ name: 'Trim', type: 'bool', default: true },
|
|
94
|
-
{ name: 'Skip empty lines', type: 'bool', default: true }
|
|
95
|
-
]
|
|
96
|
-
this.inputType = this.constructor.inputType
|
|
97
|
-
this.outputType = this.constructor.outputType
|
|
98
|
-
this.id = id
|
|
99
|
-
this.expanded = false
|
|
100
|
-
this.displayInputs = []
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
let JSONParser = class JSONParser {
|
|
105
|
-
static inputType = 'text'
|
|
106
|
-
|
|
107
|
-
static outputType = 'object'
|
|
108
|
-
|
|
109
|
-
static type = 'parser'
|
|
110
|
-
|
|
111
|
-
static initStream (params) {
|
|
112
|
-
const stream = JSONStream.parse(params['Path'])
|
|
113
|
-
return stream
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
constructor (id) {
|
|
117
|
-
this.name = this.constructor.name
|
|
118
|
-
this.inputs = [
|
|
119
|
-
{ name: 'Path', type: 'string', default: '*' },
|
|
120
|
-
]
|
|
121
|
-
this.inputType = this.constructor.inputType
|
|
122
|
-
this.outputType = this.constructor.outputType
|
|
123
|
-
this.id = id
|
|
124
|
-
this.expanded = false
|
|
125
|
-
this.displayInputs = []
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
let TextOutput = class TextOutput {
|
|
130
|
-
static inputType = 'text'
|
|
131
|
-
|
|
132
|
-
static outputType = 'html'
|
|
133
|
-
|
|
134
|
-
static type = 'output'
|
|
135
|
-
|
|
136
|
-
static initStream (params) {
|
|
137
|
-
const textOutput = document.getElementById('text-output')
|
|
138
|
-
textOutput.style.display = 'block'
|
|
139
|
-
textOutput.innerText = ''
|
|
140
|
-
const stream = through2(function (chunk, enc, callback) {
|
|
141
|
-
textOutput.innerText += chunk
|
|
142
|
-
this.push(chunk)
|
|
143
|
-
callback()
|
|
144
|
-
})
|
|
145
|
-
return stream
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
constructor (id) {
|
|
149
|
-
this.name = this.constructor.name
|
|
150
|
-
this.inputs = []
|
|
151
|
-
this.inputType = this.constructor.inputType
|
|
152
|
-
this.outputType = this.constructor.outputType
|
|
153
|
-
this.id = id
|
|
154
|
-
this.expanded = false
|
|
155
|
-
this.displayInputs = []
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
module.exports = {
|
|
159
|
-
FileLoader,
|
|
160
|
-
HTTPLoader,
|
|
161
|
-
CSVParser,
|
|
162
|
-
JSONParser,
|
|
163
|
-
TextOutput
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
package/webpack.config.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
const path = require('path')
|
|
2
|
-
const { VueLoaderPlugin } = require('vue-loader') // Support Vue's SFCs
|
|
3
|
-
const TerserPlugin = require('terser-webpack-plugin') // Minimize code
|
|
4
|
-
const webpack = require('webpack')
|
|
5
|
-
const package = require('./package.json')
|
|
6
|
-
|
|
7
|
-
module.exports = (env) => {
|
|
8
|
-
const config = {
|
|
9
|
-
entry: './src/main.js',
|
|
10
|
-
output: {
|
|
11
|
-
filename: 'bundle.js',
|
|
12
|
-
path: path.resolve(__dirname, 'dist'),
|
|
13
|
-
},
|
|
14
|
-
module: {
|
|
15
|
-
rules: [
|
|
16
|
-
{
|
|
17
|
-
test: /\.vue$/,
|
|
18
|
-
loader: 'vue-loader'
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
test: /\.js$/,
|
|
22
|
-
loader: 'babel-loader'
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
test: /\.mjs$/i, // lodash error (element)
|
|
26
|
-
resolve: { byDependency: { esm: { fullySpecified: false } } }
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
test: /\.html/,
|
|
30
|
-
type: 'asset/source'
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
test: /\.css$/,
|
|
34
|
-
use: [
|
|
35
|
-
'vue-style-loader',
|
|
36
|
-
'css-loader',
|
|
37
|
-
]
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
test: /worker\.js$/,
|
|
41
|
-
loader: "worker-loader",
|
|
42
|
-
options: {
|
|
43
|
-
inline: 'no-fallback'
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
test: /\.scss$/,
|
|
48
|
-
use: [
|
|
49
|
-
'vue-style-loader',
|
|
50
|
-
'css-loader',
|
|
51
|
-
'sass-loader'
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
},
|
|
56
|
-
plugins: [
|
|
57
|
-
new VueLoaderPlugin(),
|
|
58
|
-
// Replace those values in the code
|
|
59
|
-
new webpack.DefinePlugin({
|
|
60
|
-
'VERSION': JSON.stringify(package.version),
|
|
61
|
-
}),
|
|
62
|
-
// https://stackoverflow.com/a/68723223/2998960
|
|
63
|
-
// Work around for Buffer is undefined:
|
|
64
|
-
// https://github.com/webpack/changelog-v5/issues/10
|
|
65
|
-
new webpack.ProvidePlugin({
|
|
66
|
-
Buffer: ['buffer', 'Buffer'],
|
|
67
|
-
}),
|
|
68
|
-
new webpack.ProvidePlugin({
|
|
69
|
-
process: 'process/browser',
|
|
70
|
-
}),
|
|
71
|
-
],
|
|
72
|
-
// Load different versions of vue based on RUNTIME value
|
|
73
|
-
resolve: {
|
|
74
|
-
fallback: {
|
|
75
|
-
'buffer': require.resolve('buffer'),
|
|
76
|
-
'stream': require.resolve('stream-browserify'),
|
|
77
|
-
'url': require.resolve('url')
|
|
78
|
-
},
|
|
79
|
-
alias: {
|
|
80
|
-
vue$: 'vue/dist/vue.runtime.esm-bundler.js'
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
// Update recommended size limit
|
|
84
|
-
performance: {
|
|
85
|
-
hints: false,
|
|
86
|
-
maxEntrypointSize: 512000,
|
|
87
|
-
maxAssetSize: 512000
|
|
88
|
-
},
|
|
89
|
-
// Remove comments
|
|
90
|
-
optimization: {
|
|
91
|
-
minimize: true,
|
|
92
|
-
minimizer: [new TerserPlugin({
|
|
93
|
-
extractComments: false,
|
|
94
|
-
terserOptions: {
|
|
95
|
-
format: {
|
|
96
|
-
comments: false,
|
|
97
|
-
},
|
|
98
|
-
}
|
|
99
|
-
})],
|
|
100
|
-
},
|
|
101
|
-
// Source map
|
|
102
|
-
devtool: env.DEVELOPMENT
|
|
103
|
-
? 'eval-source-map'
|
|
104
|
-
: false
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return config
|
|
108
|
-
}
|