Skip to content

Commit 7111157

Browse files
authored
Merge pull request #25 from ssssota/bumpup-svelte
chore(script): refactor build script
2 parents 619d4f2 + b4956ce commit 7111157

File tree

5 files changed

+82
-78
lines changed

5 files changed

+82
-78
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@
4343
"esbuild": "^0.20.2",
4444
"prettier": "^3.1.1",
4545
"prettier-plugin-svelte": "^3.2.3",
46-
"svelte": "5.0.0-next.214",
46+
"svelte": "5.0.0-next.238",
4747
"tsx": "^4.7.2",
4848
"typescript": "^5.4.5",
4949
"vite": "^5.2.10"
5050
},
5151
"peerDependencies": {
52-
"svelte": ">=5.0.0-next.214",
52+
"svelte": ">=5.0.0-next.238",
5353
"vite": ">=2.0.0"
5454
},
5555
"files": [
5656
"dist"
5757
],
58-
"packageManager": "pnpm@9.7.0+sha256.b35018fbfa8f583668b2649e407922a721355cd81f61beeb4ac1d4258e585559"
58+
"packageManager": "pnpm@9.8.0+sha512.8e4c3550fb500e808dbc30bb0ce4dd1eb614e30b1c55245f211591ec2cdf9c611cabd34e1364b42f564bd54b3945ed0f49d61d1bbf2ec9bd74b866fcdc723276"
5959
}

pnpm-lock.yaml

Lines changed: 36 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/build.ts

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,15 @@
11
import * as fs from 'node:fs/promises';
22
import * as path from 'node:path';
33
import { fileURLToPath } from 'node:url';
4-
import { compile } from 'svelte/compiler';
4+
import { generate } from './generator';
55

66
const __dirname = path.dirname(fileURLToPath(import.meta.url));
77
const root = path.resolve(__dirname, '..');
8-
const componentName = 'TwcComponent';
9-
const functionName = 'createTwcComponent';
10-
const replaceElement = 'div';
11-
const classVariable = 'cls';
128

139
await main();
1410
async function main() {
15-
await Promise.all([generate('client'), generate('server')]);
16-
}
17-
18-
function generate(mode: 'client' | 'server') {
19-
const { js } = compile(
20-
`
21-
<script>
22-
let { children, class: className, ...props } = $props();
23-
</script>
24-
<${replaceElement} {...props} class={COMPOSE(className, CLASS)}>{@render children?.()}</${replaceElement}>
25-
`,
26-
{ generate: mode, filename: `${componentName}.svelte` }
27-
);
28-
29-
return fs.writeFile(
30-
path.resolve(root, `src/internal/${mode}.ts`),
31-
js.code
32-
.replace(/CLASS/g, classVariable)
33-
.replace(/COMPOSE/g, 'options.compose')
34-
.replace(`<${replaceElement}`, '<${el}')
35-
.replace(`${replaceElement}>`, '${el}>')
36-
.replace(
37-
`import * as $ from "svelte/internal/${mode}";`,
38-
[
39-
'$&',
40-
`export function ${functionName}(el: keyof HTMLElementTagNameMap, options: { compose: (...args: any[]) => string }) {`,
41-
'return (strings: string | TemplateStringsArray, ...values: any[]) => {',
42-
`const ${classVariable} = String.raw({ raw: typeof strings === 'string' ? [strings] : strings }, ...values);`
43-
].join('\n')
44-
)
45-
.replace('export default', 'return')
46-
.replace(/$/, '};\n}\n')
47-
);
11+
for (const mode of ['client', 'server'] as const) {
12+
const code = generate(mode, true);
13+
await fs.writeFile(path.resolve(root, `src/internal/${mode}.ts`), code);
14+
}
4815
}

scripts/generator.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { compile } from 'svelte/compiler';
2+
3+
const componentName = 'TwcComponent';
4+
const functionName = 'createTwcComponent';
5+
const replaceElement = 'div';
6+
const classVariable = 'cls';
7+
8+
export function generate(mode: 'client' | 'server', typescript = false) {
9+
const { js } = compile(
10+
`
11+
<script>
12+
let { children, class: className, ...props } = $props();
13+
</script>
14+
<${replaceElement} {...props} class={COMPOSE(className, CLASS)}>{@render children?.()}</${replaceElement}>
15+
`,
16+
{ generate: mode, filename: `${componentName}.svelte` }
17+
);
18+
// return code if typescript is true, otherwise return empty string
19+
const ifTs = typescript ? (code: string) => code : (_code: string) => '';
20+
21+
return js.code
22+
.replace(/CLASS/g, classVariable)
23+
.replace(/COMPOSE/g, 'options.compose')
24+
.replace(`<${replaceElement}`, '<${el}')
25+
.replace(`${replaceElement}>`, '${el}>')
26+
.replace(
27+
`import * as $ from "svelte/internal/${mode}";`,
28+
[
29+
'$&',
30+
`export function ${functionName}(el${ifTs(': keyof HTMLElementTagNameMap')}, options${ifTs(': { compose: (...args: any[]) => string }')}) {`,
31+
`return (strings${ifTs(': string | TemplateStringsArray')}, ...values${ifTs(': any[]')}) => {`,
32+
`const ${classVariable} = String.raw({ raw: typeof strings === 'string' ? [strings] : strings }, ...values);`
33+
].join('\n')
34+
)
35+
.replace('export default', 'return')
36+
.replace(/$/, '};\n}\n');
37+
}

site/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"highlight.js": "^11.9.0",
2020
"postcss": "^8.4.38",
2121
"rehype-highlight": "^7.0.0",
22-
"svelte": "5.0.0-next.214",
22+
"svelte": "5.0.0-next.238",
2323
"svelte-check": "^3.6.9",
2424
"svelte-twc": "workspace:*",
2525
"tailwindcss": "^3.4.3",

0 commit comments

Comments
 (0)