@granite-js/plugin-core 0.1.6 → 0.1.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @granite-js/plugin-core
2
2
 
3
+ ## 0.1.8
4
+
5
+ ### Patch Changes
6
+
7
+ - b69366c: improve config structure
8
+
9
+ ## 0.1.7
10
+
3
11
  ## 0.1.6
4
12
 
5
13
  ## 0.1.5
package/dist/index.cjs CHANGED
@@ -21,8 +21,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  }) : target, mod));
22
22
 
23
23
  //#endregion
24
+ const es_toolkit = __toESM(require("es-toolkit"));
24
25
  const zod = __toESM(require("zod"));
25
26
 
27
+ //#region src/createContext.ts
28
+ function createContext() {
29
+ return { meta: Object.create(null) };
30
+ }
31
+
32
+ //#endregion
26
33
  //#region src/utils/flattenPlugins.ts
27
34
  const flattenPlugins = async (plugin) => {
28
35
  if (Array.isArray(plugin)) {
@@ -49,22 +56,289 @@ async function resolvePlugins(plugins) {
49
56
  const pluginsResolved = await flattenPlugins(plugins);
50
57
  return {
51
58
  plugins: pluginsResolved,
59
+ configs: pluginsResolved.map((plugin) => plugin.config).filter(es_toolkit.isNotNil),
60
+ pluginHooks: {
61
+ devServer: {
62
+ preHandlers: pluginsResolved.filter((plugin) => plugin.dev?.order === "pre").map((plugin) => plugin.dev?.handler),
63
+ postHandlers: pluginsResolved.filter((plugin) => plugin.dev?.order === "post").map((plugin) => plugin.dev?.handler)
64
+ },
65
+ build: {
66
+ preHandlers: pluginsResolved.filter((plugin) => plugin.build?.order === "pre").map((plugin) => plugin.build?.handler),
67
+ postHandlers: pluginsResolved.filter((plugin) => plugin.build?.order === "post").map((plugin) => plugin.build?.handler)
68
+ }
69
+ }
70
+ };
71
+ }
72
+
73
+ //#endregion
74
+ //#region src/utils/mergeBabel.ts
75
+ function mergeBabel(source, target) {
76
+ if (!(source || target)) return void 0;
77
+ if (source == null) return target;
78
+ if (target == null) return source;
79
+ return {
80
+ ...source,
81
+ ...target,
82
+ presets: [...source.presets ?? [], ...target.presets ?? []],
83
+ plugins: [...source.plugins ?? [], ...target.plugins ?? []],
84
+ conditions: [...source.conditions ?? [], ...target.conditions ?? []]
85
+ };
86
+ }
87
+
88
+ //#endregion
89
+ //#region src/utils/mergeDevServer.ts
90
+ function mergeDevServer(source, target) {
91
+ if (!(source || target)) return void 0;
92
+ if (source == null) return target;
93
+ if (target == null) return source;
94
+ return {
95
+ ...source,
96
+ ...target,
97
+ middlewares: [...source.middlewares ?? [], ...target.middlewares ?? []]
98
+ };
99
+ }
100
+
101
+ //#endregion
102
+ //#region src/utils/mergeEsbuild.ts
103
+ function mergeEsbuild(source, target) {
104
+ if (!(source || target)) return void 0;
105
+ if (source == null) return target;
106
+ if (target == null) return source;
107
+ return {
108
+ ...source,
109
+ ...target,
110
+ define: {
111
+ ...source.define,
112
+ ...target.define
113
+ },
114
+ inject: [...source.inject || [], ...target.inject || []],
115
+ prelude: [...source.prelude || [], ...target.prelude || []],
116
+ banner: mergeBanners(source.banner ?? {}, target.banner ?? {})
117
+ };
118
+ }
119
+ function mergeBanners(baseBanner, overrideBanner) {
120
+ const result = { ...baseBanner };
121
+ for (const [key, value] of Object.entries(overrideBanner)) result[key] = `${result[key] ?? ""}\n${value}`;
122
+ return result;
123
+ }
124
+
125
+ //#endregion
126
+ //#region src/utils/mergeExtra.ts
127
+ function mergeExtra(source, target) {
128
+ if (!(source || target)) return void 0;
129
+ if (source == null) return target;
130
+ if (target == null) return source;
131
+ return {
132
+ ...source,
133
+ ...target
134
+ };
135
+ }
136
+
137
+ //#endregion
138
+ //#region src/utils/mergeMetro.ts
139
+ function mergeMetro(source, target) {
140
+ if (!(source || target)) return void 0;
141
+ if (source == null) return target;
142
+ if (target == null) return source;
143
+ return {
144
+ ...source,
145
+ ...target,
146
+ middlewares: [...source.middlewares || [], ...target.middlewares || []],
147
+ resolver: mergeResolver$1(source.resolver, target.resolver),
148
+ serializer: mergeSerializer(source.serializer, target.serializer),
149
+ reporter: mergeReporter(source.reporter, target.reporter)
150
+ };
151
+ }
152
+ function mergeResolver$1(source, target) {
153
+ if (!(source || target)) return void 0;
154
+ if (source == null) return target;
155
+ if (target == null) return source;
156
+ return {
157
+ ...source,
158
+ ...target,
159
+ blockList: [...(Array.isArray(source.blockList) ? source.blockList : [source.blockList]) || [], ...(Array.isArray(target.blockList) ? target.blockList : [target.blockList]) || []].filter(es_toolkit.isNotNil)
160
+ };
161
+ }
162
+ function mergeSerializer(source, target) {
163
+ if (!(source || target)) return void 0;
164
+ if (source == null) return target;
165
+ if (target == null) return source;
166
+ return {
167
+ ...source,
168
+ ...target,
169
+ getPolyfills: () => [...source.getPolyfills?.() || [], ...target.getPolyfills?.() || []]
170
+ };
171
+ }
172
+ function mergeReporter(source, target) {
173
+ if (!(source || target)) return void 0;
174
+ if (source == null) return target;
175
+ if (target == null) return source;
176
+ return { update: (event) => {
177
+ source.update?.(event);
178
+ target.update?.(event);
179
+ } };
180
+ }
181
+
182
+ //#endregion
183
+ //#region src/utils/mergeResolver.ts
184
+ function mergeResolver(source, target) {
185
+ if (!(source || target)) return void 0;
186
+ if (source == null) return target;
187
+ if (target == null) return source;
188
+ return {
189
+ alias: [...source.alias ?? [], ...target.alias ?? []],
190
+ protocols: {
191
+ ...source.protocols,
192
+ ...target.protocols
193
+ }
194
+ };
195
+ }
196
+
197
+ //#endregion
198
+ //#region src/utils/mergeSwc.ts
199
+ function mergeSwc(source, target) {
200
+ if (!(source || target)) return void 0;
201
+ if (source == null) return target;
202
+ if (target == null) return source;
203
+ return {
204
+ ...source,
205
+ ...target,
206
+ plugins: [...source.plugins || [], ...target.plugins || []]
207
+ };
208
+ }
209
+
210
+ //#endregion
211
+ //#region src/utils/mergeTransformer.ts
212
+ function mergeTransformer(source, target) {
213
+ if (!(source || target)) return void 0;
214
+ if (source == null) return target;
215
+ if (target == null) return source;
216
+ let transformSync;
217
+ let transformAsync;
218
+ if (!(source.transformSync || target.transformSync)) transformSync = void 0;
219
+ else if (source.transformSync && target.transformSync) transformSync = (id, code) => {
220
+ let src = code;
221
+ src = source.transformSync?.(id, src) ?? src;
222
+ src = target.transformSync?.(id, src) ?? src;
223
+ return src;
224
+ };
225
+ else if (source.transformSync) transformSync = source.transformSync;
226
+ else if (target.transformSync) transformSync = target.transformSync;
227
+ if (!(source.transformAsync || target.transformAsync)) transformAsync = void 0;
228
+ else if (source.transformAsync && target.transformAsync) transformAsync = async (id, code) => {
229
+ let src = code;
230
+ src = await source.transformAsync?.(id, src) ?? src;
231
+ src = await target.transformAsync?.(id, src) ?? src;
232
+ return src;
233
+ };
234
+ else if (source.transformAsync) transformAsync = source.transformAsync;
235
+ else if (target.transformAsync) transformAsync = target.transformAsync;
236
+ return {
237
+ transformSync,
238
+ transformAsync
239
+ };
240
+ }
241
+
242
+ //#endregion
243
+ //#region src/utils/mergeConfig.ts
244
+ function mergeConfig(base, ...configs) {
245
+ if (!(base || configs.length)) return void 0;
246
+ return configs.reduce((acc, curr) => ({
247
+ ...acc,
248
+ ...curr,
249
+ resolver: mergeResolver(acc?.resolver, curr?.resolver),
250
+ transformer: mergeTransformer(acc?.transformer, curr?.transformer),
251
+ esbuild: mergeEsbuild(acc?.esbuild, curr?.esbuild),
252
+ babel: mergeBabel(acc?.babel, curr?.babel),
253
+ swc: mergeSwc(acc?.swc, curr?.swc),
254
+ devServer: mergeDevServer(acc?.devServer, curr?.devServer),
255
+ metro: mergeMetro(acc?.metro, curr?.metro),
256
+ extra: mergeExtra(acc?.extra, curr?.extra)
257
+ }), base);
258
+ }
259
+
260
+ //#endregion
261
+ //#region src/utils/mergeBuildConfigs.ts
262
+ function mergeBuildConfigs(baseConfig, ...otherConfigs) {
263
+ const mergedConfig = otherConfigs.reduce((acc, curr) => ({
264
+ entry: acc.entry ?? curr.entry,
265
+ outfile: acc.outfile ?? curr.outfile,
266
+ platform: acc.platform ?? curr.platform,
267
+ resolver: mergeResolver(acc.resolver, curr.resolver),
268
+ transformer: mergeTransformer(acc.transformer, curr.transformer),
269
+ esbuild: mergeEsbuild(acc.esbuild, curr.esbuild),
270
+ swc: mergeSwc(acc.swc, curr.swc),
271
+ babel: mergeBabel(acc.babel, curr.babel),
272
+ extra: mergeExtra(acc.extra, curr.extra)
273
+ }), baseConfig);
274
+ return mergedConfig;
275
+ }
276
+
277
+ //#endregion
278
+ //#region src/utils/createPluginHooksDriver.ts
279
+ function createPluginHooksDriver(config) {
280
+ const context = createPluginContext();
281
+ const { devServer: devServerHooks, build: buildHooks } = config.pluginHooks;
282
+ const baseArgs = {
283
+ cwd: config.cwd,
284
+ appName: config.appName,
285
+ entryFile: config.entryFile,
286
+ outdir: config.outdir
287
+ };
288
+ return {
52
289
  devServer: {
53
- preHandlers: pluginsResolved.filter((plugin) => plugin.dev?.order === "pre").map((plugin) => plugin.dev?.handler),
54
- postHandlers: pluginsResolved.filter((plugin) => plugin.dev?.order === "post").map((plugin) => plugin.dev?.handler)
290
+ pre: async (args) => {
291
+ for (const handler of devServerHooks.preHandlers) await handler.call(context, {
292
+ ...baseArgs,
293
+ ...args
294
+ });
295
+ },
296
+ post: async (args) => {
297
+ for (const handler of devServerHooks.postHandlers) await handler.call(context, {
298
+ ...baseArgs,
299
+ ...args
300
+ });
301
+ }
55
302
  },
56
303
  build: {
57
- preHandlers: pluginsResolved.filter((plugin) => plugin.build?.order === "pre").map((plugin) => plugin.build?.handler),
58
- postHandlers: pluginsResolved.filter((plugin) => plugin.build?.order === "post").map((plugin) => plugin.build?.handler)
304
+ pre: async () => {
305
+ for (const handler of buildHooks.preHandlers) await handler.call(context, { ...baseArgs });
306
+ },
307
+ post: async (args) => {
308
+ for (const handler of buildHooks.postHandlers) await handler.call(context, {
309
+ ...baseArgs,
310
+ ...args
311
+ });
312
+ }
59
313
  }
60
314
  };
61
315
  }
316
+ function createPluginContext() {
317
+ const meta = Object.create(null);
318
+ const context = { meta };
319
+ return context;
320
+ }
62
321
 
63
322
  //#endregion
64
- //#region src/types/mpackConfig.ts
65
- const mpackConfigScheme = zod.z.object({ devServer: zod.z.object({ middlewares: zod.z.custom().default([]) }).optional().default({ middlewares: [] }) }).optional();
323
+ //#region src/schema/pluginConfig.ts
324
+ const pluginConfigSchema = zod.object({
325
+ cwd: zod.string().default(process.cwd()),
326
+ appName: zod.string(),
327
+ scheme: zod.string(),
328
+ outdir: zod.string().default("dist"),
329
+ entryFile: zod.string().default("./src/_app.tsx"),
330
+ build: zod.custom().optional(),
331
+ devServer: zod.custom().optional(),
332
+ metro: zod.custom().optional(),
333
+ plugins: zod.custom()
334
+ });
66
335
 
67
336
  //#endregion
337
+ exports.createContext = createContext;
338
+ exports.createPluginContext = createPluginContext;
339
+ exports.createPluginHooksDriver = createPluginHooksDriver;
68
340
  exports.flattenPlugins = flattenPlugins;
69
- exports.mpackConfigScheme = mpackConfigScheme;
341
+ exports.mergeBuildConfigs = mergeBuildConfigs;
342
+ exports.mergeConfig = mergeConfig;
343
+ exports.pluginConfigSchema = pluginConfigSchema;
70
344
  exports.resolvePlugins = resolvePlugins;