actionview-svelte-handler 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ts/builder.ts CHANGED
@@ -1,10 +1,15 @@
1
1
  import { readable, Stores } from 'svelte/store'
2
2
  import { importFromStringSync } from 'module-from-string'
3
- import * as esbuild from 'esbuild'
4
- import sveltePlugin from 'esbuild-svelte'
5
3
  import { sveltePreprocess } from 'svelte-preprocess'
6
4
  import type { Warning } from 'svelte/types/compiler/interfaces'
7
5
  import * as recast from 'recast'
6
+ import { rollup } from 'rollup';
7
+ import svelte from "rollup-plugin-svelte"
8
+ import alias from '@rollup/plugin-alias';
9
+ import commonjs from '@rollup/plugin-commonjs';
10
+ import { nodeResolve } from '@rollup/plugin-node-resolve';
11
+ import virtual from '@rollup/plugin-virtual';
12
+ import swc from '@rollup/plugin-swc';
8
13
 
9
14
  export interface BuildSuccess {
10
15
  client: string
@@ -40,6 +45,7 @@ class Builder {
40
45
  ssr: boolean
41
46
  workingDir: string
42
47
  preprocess: object
48
+ pathAliases?: object
43
49
 
44
50
  constructor (
45
51
  path: string,
@@ -49,10 +55,11 @@ class Builder {
49
55
  server: string | null,
50
56
  ssr: boolean,
51
57
  workingDir: string,
52
- preprocess: object
58
+ preprocess: object,
59
+ pathAliases: object
53
60
  ) {
54
61
  this.path = path
55
- this.props = readable(props)
62
+ this.props = readable(Object.assign(props, locals, props))
56
63
  this.locals = locals
57
64
  this.compiled = {
58
65
  client,
@@ -61,55 +68,70 @@ class Builder {
61
68
  this.ssr = ssr
62
69
  this.workingDir = workingDir
63
70
  this.preprocess = preprocess
71
+ this.pathAliases = pathAliases
64
72
  }
65
73
 
66
- async bundle (generate: 'ssr' | 'dom', sveltePath = 'svelte'): Promise<string> {
67
- const bundle = await esbuild.build({
68
- entryPoints: [this.path],
69
- mainFields: ['svelte', 'browser', 'module', 'main'],
70
- conditions: ['svelte', 'browser'],
71
- absWorkingDir: this.workingDir,
72
- write: false,
73
- outfile: 'component.js',
74
- bundle: true,
75
- format: 'esm',
76
- metafile: true,
74
+ async bundle (generate: 'ssr' | 'dom'): Promise<string> {
75
+ const bundle = (await (await rollup({
76
+ input: 'entry',
77
+ output: {
78
+ format: "esm",
79
+ sourcemap: false
80
+ },
81
+ watch: {
82
+ skipWrite: true
83
+ },
77
84
  plugins: [
78
- // @ts-expect-error
79
- sveltePlugin({
85
+ // @ts-expect-error see https://github.com/rollup/plugins/issues/1662
86
+ virtual({
87
+ entry: `import App from '${this.path}'; export default App`
88
+ }),
89
+ // @ts-expect-error see https://github.com/rollup/plugins/issues/1662
90
+ svelte({
80
91
  compilerOptions: {
81
92
  generate,
82
93
  css: 'injected',
83
94
  hydratable: true,
84
- sveltePath
85
95
  },
96
+ emitCss: false,
86
97
  preprocess: sveltePreprocess(this.preprocess),
87
- filterWarnings: (warning: Warning) => {
98
+ onwarn: (warning: Warning, handler: Function) => {
88
99
  if (
89
100
  warning.code === 'missing-declaration' &&
90
101
  warning.message.includes("'props'")
91
- ) {
92
- return false
102
+ ) return
103
+
104
+ handler(warning)
105
+ }
106
+ }),
107
+ // @ts-expect-error see https://github.com/rollup/plugins/issues/1662
108
+ alias({
109
+ entries: Object.entries(this.pathAliases || {}).map((k, v) => { return new Object({ find: k, replacement: v }) })
110
+ }),
111
+ // @ts-expect-error see https://github.com/rollup/plugins/issues/1662
112
+ commonjs(),
113
+ nodeResolve({
114
+ browser: true,
115
+ exportConditions: ['svelte'],
116
+ extensions: ['.svelte']
117
+ }),
118
+ // @ts-expect-error see https://github.com/rollup/plugins/issues/1662
119
+ swc({
120
+ swc: {
121
+ jsc: {
122
+ target: "es6"
93
123
  }
94
- return true
95
124
  }
96
125
  })
97
126
  ]
98
- })
99
-
100
- // @ts-expect-error
101
- const throwables = [].concat(bundle.errors, bundle.warnings)
102
-
103
- if (throwables.length > 0) {
104
- throw throwables[0] // eslint-disable-line @typescript-eslint/no-throw-literal
105
- }
106
-
107
- return bundle.outputFiles[0].text
127
+ })).generate({ format: "esm", sourcemap: "inline" })).output
128
+
129
+ return bundle[0].code
108
130
  }
109
131
 
110
132
  async client (): Promise<string> {
111
133
  return (
112
- this.compiled?.client || (this.standardizeClient(await this.bundle('dom', 'https://esm.sh/svelte'))) // eslint-disable-line
134
+ this.compiled?.client || this.standardizeClient(await this.bundle("dom")) // eslint-disable-line
113
135
  )
114
136
  }
115
137
 
@@ -135,7 +157,7 @@ class Builder {
135
157
  return false
136
158
  }
137
159
  })
138
-
160
+
139
161
  return recast.print(ast).code
140
162
  }
141
163
 
@@ -29,8 +29,9 @@ declare class Builder {
29
29
  ssr: boolean;
30
30
  workingDir: string;
31
31
  preprocess: object;
32
- constructor(path: string, props: object, locals: object, client: string | null, server: string | null, ssr: boolean, workingDir: string, preprocess: object);
33
- bundle(generate: 'ssr' | 'dom', sveltePath?: string): Promise<string>;
32
+ pathAliases?: object;
33
+ constructor(path: string, props: object, locals: object, client: string | null, server: string | null, ssr: boolean, workingDir: string, preprocess: object, pathAliases: object);
34
+ bundle(generate: 'ssr' | 'dom'): Promise<string>;
34
35
  client(): Promise<string>;
35
36
  standardizeClient(code: string): string;
36
37
  server(): Promise<{