@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.
@@ -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('div', component) as ComponentWithTags
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 t1r77qux"></div></div>')
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 t10upe3l"></div></div>')
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 t10upe3l"></div></div>')
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 t1dc5e1n custom-class"></div></div>')
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 ta5e6s7">abc</div></div>')
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
  })
package/tsconfig.json CHANGED
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "module": "esNext",
15
15
  "importHelpers": true,
16
- "moduleResolution": "node",
16
+ "moduleResolution": "bundler",
17
17
  "experimentalDecorators": true,
18
18
  "strict": true,
19
19
  "strictPropertyInitialization": false,