Skip to content

Commit 86cdeaf

Browse files
rewrite using typescript
1 parent 6fe9442 commit 86cdeaf

21 files changed

+462
-212
lines changed

build/base/plugins/index.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import common from 'rollup-plugin-commonjs'
2+
import resolve from 'rollup-plugin-node-resolve'
3+
import vue from 'rollup-plugin-vue'
4+
5+
/** @type {import('rollup').RollupOptions['plugins']} */
6+
const plugins = [common(), resolve(), vue({ needMap: false })]
7+
8+
export default plugins

build/base/plugins/typescript.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default { objectHashIgnoreUnknownHack: true }

build/rollup.config.dev.js

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
11
import path from 'path'
2-
import common from 'rollup-plugin-commonjs'
2+
import typescript from 'rollup-plugin-typescript2'
33
import serve from 'rollup-plugin-serve'
44
import livereload from 'rollup-plugin-livereload'
5-
import vue from 'rollup-plugin-vue'
6-
import resolve from 'rollup-plugin-node-resolve'
75
import replace from 'rollup-plugin-replace'
86

7+
import typescriptPluginOptions from './base/plugins/typescript'
8+
import plugins from './base/plugins/index'
9+
10+
const DEMO_DIR = path.join(__dirname, '../demo')
11+
12+
/** @type {import('rollup').RollupOptions} */
913
export default {
10-
input: path.join(__dirname, '..', 'demo', 'index.js'),
14+
input: path.join(DEMO_DIR, 'index.ts'),
1115
output: {
12-
file: path.join(__dirname, '..', 'demo', 'demo.js'),
16+
file: path.join(DEMO_DIR, 'demo.js'),
1317
format: 'iife',
1418
name: 'demo',
1519
sourcemap: true,
1620
},
1721
plugins: [
18-
common(),
19-
// demo crashes on changes https://github.com/vuejs/rollup-plugin-vue/issues/238
20-
vue({ needMap: false }),
22+
typescript(typescriptPluginOptions),
2123
replace({
2224
'process.env.NODE_ENV': JSON.stringify('development'),
2325
}),
24-
resolve(),
2526
serve({
2627
open: true,
27-
contentBase: path.join(__dirname, '..', 'demo'),
28+
contentBase: DEMO_DIR,
2829
port: 8080,
2930
}),
3031
livereload({
3132
verbose: true,
32-
watch: path.join(__dirname, '..', 'demo'),
33+
watch: DEMO_DIR,
3334
}),
34-
],
35+
].concat(plugins),
3536
}

build/rollup.config.prod.js

+26-17
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,57 @@
11
import path from 'path'
2-
import vue from 'rollup-plugin-vue'
3-
import { terser } from 'rollup-plugin-terser'
2+
import typescript from 'rollup-plugin-typescript2'
43
import replace from 'rollup-plugin-replace'
5-
import resolve from 'rollup-plugin-node-resolve'
6-
import common from 'rollup-plugin-commonjs'
4+
import { terser } from 'rollup-plugin-terser'
75

6+
import typescriptPluginOptions from './base/plugins/typescript'
7+
import basePlugins from './base/plugins/index'
8+
9+
const SOURCE = path.join(__dirname, '../src/index.ts')
10+
const DIST_DIR = 'dist'
11+
const FILE_NAME = 'vue-accessible-modal'
812
const name = 'VueAccessibleModal'
13+
const external = ['vue']
914
const plugins = [
1015
replace({
1116
'process.env.NODE_ENV': JSON.stringify('production'),
1217
}),
13-
resolve(),
14-
common(),
15-
vue(),
16-
terser(),
17-
]
18+
].concat(basePlugins)
1819

20+
/** @type {import('rollup').RollupOptions} */
1921
export default [
2022
{
21-
input: path.join(__dirname, '..', 'src', 'index.js'),
23+
input: SOURCE,
24+
external,
2225
output: [
2326
{
24-
file: 'dist/vue-accessible-modal.js',
27+
file: `${DIST_DIR}/${FILE_NAME}.js`,
2528
format: 'umd',
2629
name,
2730
},
2831
{
29-
file: 'dist/vue-accessible-modal.common.js',
32+
file: `${DIST_DIR}/${FILE_NAME}.common.js`,
3033
format: 'cjs',
3134
},
3235
{
33-
file: 'dist/vue-accessible-modal.esm.js',
36+
file: `${DIST_DIR}/${FILE_NAME}.esm.js`,
3437
format: 'esm',
3538
},
3639
],
37-
plugins,
40+
plugins: [
41+
typescript(Object.assign({}, typescriptPluginOptions, { tsconfig: './tsconfig.prod.json'})),
42+
].concat(plugins),
3843
},
3944
{
40-
input: path.join(__dirname, '..', 'src', 'index.js'),
45+
input: SOURCE,
46+
external,
4147
output: {
42-
file: 'dist/vue-accessible-modal.min.js',
48+
file: `${DIST_DIR}/${FILE_NAME}.min.js`,
4349
format: 'umd',
4450
name,
4551
},
46-
plugins,
52+
plugins: [
53+
typescript(Object.assign({}, typescriptPluginOptions, { tsconfig: './tsconfig.prod.umd.json'})),
54+
terser()
55+
].concat(plugins),
4756
},
4857
]

demo/App.vue

+7-9
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,32 @@
99
</section>
1010
</template>
1111

12-
<script>
12+
<script lang="ts">
13+
import Vue from 'vue'
1314
import ExampleComponent from './components/ExampleComponent.vue'
1415
import ConfirmComponent from './components/ConfirmComponent.vue'
1516
16-
export default {
17+
export default Vue.extend({
1718
name: 'App',
18-
data() {
19-
return {}
20-
},
2119
methods: {
2220
openModal() {
2321
this.$modal.show(ExampleComponent, {
2422
props: {
2523
foo: 'foo',
2624
bar: 'bar',
2725
},
28-
listeners: { submit: data => console.log(data) },
26+
listeners: { submit: (data: object) => console.log(data) },
2927
label: 'Modal',
3028
classes: 'foo bar',
3129
attributes: {
3230
id: 'bar',
3331
},
34-
// transition: 'fade',
32+
transition: 'rotate-in',
3533
})
3634
},
3735
openConfirmModal() {
3836
this.$modal
39-
.confirm('Do you like JavaScript?', { component: ConfirmComponent })
37+
.confirm<string>(ConfirmComponent, 'Do you like JavaScript?')
4038
.then(val => {
4139
console.log(val)
4240
})
@@ -54,7 +52,7 @@ export default {
5452
console.log('close')
5553
},
5654
},
57-
}
55+
})
5856
</script>
5957

6058
<style lang="scss">

demo/components/ConfirmComponent.vue

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
</section>
77
</template>
88

9-
<script>
10-
export default {
9+
<script lang="ts">
10+
import Vue from 'vue'
11+
12+
export default Vue.extend({
1113
name: 'ConfirmComponent',
1214
props: {
1315
message: {
@@ -31,5 +33,5 @@ export default {
3133
this.reject('bar')
3234
},
3335
},
34-
}
35-
</script>
36+
})
37+
</script>

demo/components/ExampleComponent.vue

+10-8
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
<button type="button" @click="closeModal">Close modal</button>
99
<textarea></textarea>
1010
<textarea disabled></textarea>
11-
<input type="text">
12-
<input type="text" disabled>
11+
<input type="text" />
12+
<input type="text" disabled />
1313
<div tabindex="0">Focus</div>
1414
<button type="button" style="display:none;">Button</button>
1515
<button type="button" style="display:none;">Button</button>
1616
</div>
1717
</template>
1818

19-
<script>
20-
export default {
19+
<script lang="ts">
20+
import Vue from 'vue'
21+
22+
export default Vue.extend({
2123
name: 'ExampleComponent',
2224
props: {
2325
foo: {
@@ -41,14 +43,14 @@ export default {
4143
classes: ['baz', 'poo', { javascript: true, jQuery: false }],
4244
label: 'Foo bar',
4345
attributes: {
44-
'data-test': 'foo'
45-
}
46+
'data-test': 'foo',
47+
},
4648
},
47-
}
49+
})
4850
</script>
4951

5052
<style>
5153
.box {
5254
padding: 16px;
5355
}
54-
</style>
56+
</style>

demo/index.js renamed to demo/index.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import VueAccessibleModal from '../src'
44

55
Vue.config.productionTip = false
66

7-
Vue.use(VueAccessibleModal, {
8-
transition: 'fade',
9-
})
7+
Vue.use(VueAccessibleModal, { transition: 'fade' })
108

119
new Vue({
1210
el: '#app',

0 commit comments

Comments
 (0)