@teiler/svelte 0.0.29 → 0.0.30
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/.npmignore +5 -0
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +56 -0
- package/dist/teiler-svelte.cjs.js +3 -2
- package/dist/teiler-svelte.cjs.js.map +1 -1
- package/dist/teiler-svelte.d.ts +16 -16
- package/dist/teiler-svelte.esm.js +3 -2
- package/dist/teiler-svelte.esm.js.map +1 -1
- package/dist/teiler-svelte.umd.js +3 -2
- package/dist/teiler-svelte.umd.js.map +1 -1
- package/package.json +30 -33
- package/rolldown.config.js +121 -0
- package/src/component.ts +6 -6
- package/src/index.test.ts +5 -5
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { readFileSync } from 'fs'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import { compile, preprocess } from 'svelte/compiler'
|
|
4
|
+
import sveltePreprocess from 'svelte-preprocess'
|
|
5
|
+
import { dts } from 'rolldown-plugin-dts'
|
|
6
|
+
import { transformSync } from '@swc/core'
|
|
7
|
+
|
|
8
|
+
const globals = {
|
|
9
|
+
'svelte/internal': 'svelte/internal',
|
|
10
|
+
'svelte/internal/disclose-version': 'svelte/internal/disclose-version',
|
|
11
|
+
'svelte/store': 'svelte/store',
|
|
12
|
+
svelte: 'svelte',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function sveltePlugin() {
|
|
16
|
+
return {
|
|
17
|
+
name: 'svelte-rolldown',
|
|
18
|
+
|
|
19
|
+
resolveId(source, importer) {
|
|
20
|
+
if (source.endsWith('.svelte')) {
|
|
21
|
+
if (!importer) return path.resolve(source)
|
|
22
|
+
return path.resolve(path.dirname(importer), source)
|
|
23
|
+
}
|
|
24
|
+
return null
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
async transform(code, id) {
|
|
28
|
+
if (!id.endsWith('.svelte')) return null
|
|
29
|
+
|
|
30
|
+
const source = readFileSync(id, 'utf-8')
|
|
31
|
+
|
|
32
|
+
const preprocessed = await preprocess(
|
|
33
|
+
source,
|
|
34
|
+
sveltePreprocess({
|
|
35
|
+
typescript({ content, filename }) {
|
|
36
|
+
const { code, map } = transformSync(content, {
|
|
37
|
+
filename: `${filename}.ts`,
|
|
38
|
+
sourceMaps: true,
|
|
39
|
+
})
|
|
40
|
+
return { code, map }
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
{ filename: id },
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
const { js } = compile(preprocessed.code, {
|
|
47
|
+
filename: id,
|
|
48
|
+
sourcemap: false,
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
code: js.code,
|
|
53
|
+
moduleType: 'js',
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default [
|
|
60
|
+
{
|
|
61
|
+
input: 'src/index.ts',
|
|
62
|
+
external: ['svelte', 'svelte/internal', /^svelte\//],
|
|
63
|
+
resolve: {
|
|
64
|
+
alias: {
|
|
65
|
+
'@teiler/core': path.resolve('../core/src/index.ts'),
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
output: [
|
|
69
|
+
{
|
|
70
|
+
file: 'dist/teiler-svelte.umd.js',
|
|
71
|
+
name: 'teiler-svelte',
|
|
72
|
+
format: 'umd',
|
|
73
|
+
sourcemap: true,
|
|
74
|
+
minify: true,
|
|
75
|
+
globals,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
file: 'dist/teiler-svelte.cjs.js',
|
|
79
|
+
format: 'cjs',
|
|
80
|
+
sourcemap: true,
|
|
81
|
+
minify: true,
|
|
82
|
+
globals,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
file: 'dist/teiler-svelte.esm.js',
|
|
86
|
+
format: 'esm',
|
|
87
|
+
sourcemap: true,
|
|
88
|
+
minify: true,
|
|
89
|
+
globals,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
plugins: [sveltePlugin()],
|
|
93
|
+
watch: {
|
|
94
|
+
clearScreen: false,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
input: 'src/index.ts',
|
|
99
|
+
external: ['svelte', 'svelte/internal', /^svelte\//, '@teiler/core'],
|
|
100
|
+
output: {
|
|
101
|
+
dir: 'dist',
|
|
102
|
+
format: 'es',
|
|
103
|
+
entryFileNames: (chunk) => (chunk.name.endsWith('.d') ? 'teiler-svelte.d.ts' : '_entry.js'),
|
|
104
|
+
},
|
|
105
|
+
plugins: [
|
|
106
|
+
{
|
|
107
|
+
name: 'svelte-dts-redirect',
|
|
108
|
+
resolveId(id, importer) {
|
|
109
|
+
if (id.endsWith('.svelte') && importer) {
|
|
110
|
+
return { id: path.resolve(path.dirname(importer), id + '.d.ts') }
|
|
111
|
+
}
|
|
112
|
+
return null
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
dts({ emitDtsOnly: true }),
|
|
116
|
+
],
|
|
117
|
+
watch: {
|
|
118
|
+
clearScreen: false,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
]
|
package/src/component.ts
CHANGED
|
@@ -25,26 +25,26 @@ const createComponent = <Target extends HTMLElements, Props extends object = {}>
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
type InferProps<Component, Props> = Component extends SvelteTeilerComponent<HTMLElements, infer P> ? P & Props : Props
|
|
28
|
-
type InferComponent<Component, Props> = Component extends SvelteTeilerComponent<infer E, infer P> ? SvelteTeilerComponent<E, Props & P> : SvelteTeilerComponent<HTMLElements, Props>
|
|
28
|
+
type InferComponent<Component, Props, Tag> = Component extends SvelteTeilerComponent<infer E, infer P> ? SvelteTeilerComponent<Tag extends HTMLElements ? Tag : E, Props & P> : SvelteTeilerComponent<HTMLElements, Props>
|
|
29
29
|
|
|
30
|
-
type Component<Target extends HTMLElements> = {
|
|
30
|
+
type Component<Target extends HTMLElements, Tag extends HTMLElements | undefined = Target> = {
|
|
31
31
|
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<Target, Props>
|
|
32
|
-
<Component>(binded: Component): <Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<InferProps<Component, Props>>[]) => InferComponent<Component, Props>
|
|
32
|
+
<Component>(binded: Component): <Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<InferProps<Component, Props>>[]) => InferComponent<Component, Props, Tag>
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
type Global = {
|
|
36
36
|
<Props extends object = {}>(string: TemplateStringsArray, ...properties: Properties<Props>[]): SvelteTeilerComponent<HTMLElements, Props>
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
type ComponentWithTags = Component<'div'> & { [K in Exclude<HTMLElements, null>]: Component<K> }
|
|
39
|
+
type ComponentWithTags = Component<'div', undefined> & { [K in Exclude<HTMLElements, null>]: Component<K> }
|
|
40
40
|
|
|
41
|
-
const construct = (tag: HTMLElements, compiler: Compiler) => {
|
|
41
|
+
const construct = (tag: HTMLElements | undefined, compiler: Compiler) => {
|
|
42
42
|
return <Props extends object = {}>(stringOrBinded: TeilerComponent<HTMLElements, Props> | TemplateStringsArray, ...properties: Properties<Props>[]) => {
|
|
43
43
|
return styled<Props, SvelteTeilerComponent<HTMLElements, Props>>(tag, compiler, createComponent, stringOrBinded, ...properties)
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const svelteComponent = construct(
|
|
47
|
+
const svelteComponent = construct(undefined, component) as ComponentWithTags
|
|
48
48
|
|
|
49
49
|
tags.forEach((tag) => {
|
|
50
50
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
package/src/index.test.ts
CHANGED
|
@@ -36,7 +36,7 @@ describe('component', () => {
|
|
|
36
36
|
|
|
37
37
|
const { baseElement } = render(StyledComponent)
|
|
38
38
|
|
|
39
|
-
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1r77qux
|
|
39
|
+
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1r77qux t8e9dar"></div></div>')
|
|
40
40
|
})
|
|
41
41
|
|
|
42
42
|
test('should create a component with props', () => {
|
|
@@ -49,7 +49,7 @@ describe('component', () => {
|
|
|
49
49
|
context: new Map(Object.entries({ STYLE_SHEET: styleSheet })),
|
|
50
50
|
})
|
|
51
51
|
|
|
52
|
-
expect(baseElement.innerHTML).toBe('<div><div class="teiler-100tn2k
|
|
52
|
+
expect(baseElement.innerHTML).toBe('<div><div class="teiler-100tn2k t1fqd64x"></div></div>')
|
|
53
53
|
expect(styleSheet.dump()).toBe(' .teiler-100tn2k{color:yellow;}')
|
|
54
54
|
})
|
|
55
55
|
|
|
@@ -62,7 +62,7 @@ describe('component', () => {
|
|
|
62
62
|
context: new Map(Object.entries({ STYLE_SHEET: styleSheet, THEME: writable({ fontColor: 'green' }) })),
|
|
63
63
|
})
|
|
64
64
|
|
|
65
|
-
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1dc5e1n
|
|
65
|
+
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1dc5e1n t1fqd64x"></div></div>')
|
|
66
66
|
expect(styleSheet.dump()).toBe(' .teiler-1dc5e1n{color:green;}')
|
|
67
67
|
})
|
|
68
68
|
|
|
@@ -78,7 +78,7 @@ describe('component', () => {
|
|
|
78
78
|
context: new Map(Object.entries({ STYLE_SHEET: styleSheet })),
|
|
79
79
|
})
|
|
80
80
|
|
|
81
|
-
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1dc5e1n
|
|
81
|
+
expect(baseElement.innerHTML).toBe('<div><div class="teiler-1dc5e1n tsqxzcw custom-class"></div></div>')
|
|
82
82
|
expect(styleSheet.dump()).toBe(' .teiler-1dc5e1n{color:green;}')
|
|
83
83
|
})
|
|
84
84
|
})
|
|
@@ -143,7 +143,7 @@ describe('ThemeProvider', () => {
|
|
|
143
143
|
context: new Map(Object.entries({ STYLE_SHEET: styleSheet })),
|
|
144
144
|
})
|
|
145
145
|
|
|
146
|
-
expect(baseElement.innerHTML).toBe('<div><div class="teiler-9hfnro
|
|
146
|
+
expect(baseElement.innerHTML).toBe('<div><div class="teiler-9hfnro thjt86x">abc</div></div>')
|
|
147
147
|
expect(styleSheet.dump()).toBe(' .teiler-9hfnro{color:green;}')
|
|
148
148
|
})
|
|
149
149
|
})
|