@aerogel/vite 0.1.1 → 0.1.2

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.
@@ -1,4 +1,5 @@
1
1
  import { ComponentResolver } from 'unplugin-vue-components';
2
+ import { IconResource } from 'vite-plugin-pwa';
2
3
  import { ManifestEntry } from 'workbox-build';
3
4
  import { Plugin as Plugin_2 } from 'vite';
4
5
 
@@ -38,10 +39,15 @@ export declare interface Options {
38
39
  name?: string;
39
40
  description?: string;
40
41
  themeColor?: string;
41
- icons?: Record<string, string>;
42
+ icons?: Record<string, string> | IconResource[];
42
43
  baseUrl?: string;
43
44
  static404Redirect?: boolean | string;
44
45
  solidClientId?: boolean | ClientIDDocument;
46
+ pwa?: {
47
+ development?: boolean;
48
+ includeAssets?: string[];
49
+ additionalManifestEntries?: ManifestEntry[];
50
+ };
45
51
  }
46
52
 
47
53
  export { }
@@ -1,13 +1,13 @@
1
- import { dirname as v, resolve as a } from "node:path";
2
- import y from "@tailwindcss/vite";
3
- import b from "@vitejs/plugin-vue";
4
- import { md5 as S, objectWithoutEmpty as l, stringMatchAll as M, toString as j, arrayFilter as w, after as O } from "@noeldemartin/utils";
1
+ import { dirname as M, resolve as u } from "node:path";
2
+ import w from "@tailwindcss/vite";
3
+ import j from "@vitejs/plugin-vue";
4
+ import { md5 as A, objectWithoutEmpty as p, stringMatchAll as O, toString as x, arrayFilter as C, after as E } from "@noeldemartin/utils";
5
5
  import { VitePWA as H } from "vite-plugin-pwa";
6
- import $ from "mustache";
7
- import { execSync as x } from "node:child_process";
8
- import { existsSync as f, readFileSync as i } from "node:fs";
9
- import A from "image-size";
10
- const I = `<!DOCTYPE html>
6
+ import P from "mustache";
7
+ import { execSync as $ } from "node:child_process";
8
+ import { existsSync as S, readFileSync as l } from "node:fs";
9
+ import I from "image-size";
10
+ const k = `<!DOCTYPE html>
11
11
  <html lang="en">
12
12
  <head>
13
13
  <meta charset="UTF-8" />
@@ -64,20 +64,21 @@ const I = `<!DOCTYPE html>
64
64
  </body>
65
65
  </html>
66
66
  `;
67
- function P(e, t, o) {
67
+ function _(e, t, o) {
68
68
  const s = o.static404Redirect ?? process.env.NODE_ENV === "production";
69
69
  o.lib || !s || e.emitFile({
70
70
  type: "asset",
71
71
  fileName: typeof o.static404Redirect == "string" ? o.static404Redirect : "404.html",
72
- source: $.render(I, { app: t })
72
+ source: P.render(k, { app: t })
73
73
  });
74
74
  }
75
- function p(e, t) {
75
+ function m(e, t) {
76
+ var c;
76
77
  if (!e.baseUrl)
77
78
  return console.warn(
78
79
  "It was not possible to create a Solid ClientID document because the baseUrl was not provided, to remove this warning add a `baseUrl` option in the Aerogel vite plugin options."
79
80
  ), null;
80
- const o = e.baseUrl.endsWith("/") ? e.baseUrl : `${e.baseUrl}/`, s = t.icons && (t.icons["512x512"] ?? Object.values(t.icons).pop()), n = {
81
+ const o = e.baseUrl.endsWith("/") ? e.baseUrl : `${e.baseUrl}/`, s = t.icons && (Array.isArray(t.icons) ? (c = t.icons[0]) == null ? void 0 : c.src : t.icons["512x512"] ?? Object.values(t.icons).pop()), r = {
81
82
  "@context": "https://www.w3.org/ns/solid/oidc-context.jsonld",
82
83
  client_id: `${o}clientid.jsonld`,
83
84
  client_name: e.name,
@@ -87,52 +88,52 @@ function p(e, t) {
87
88
  grant_types: ["refresh_token", "authorization_code"],
88
89
  response_types: ["code"]
89
90
  };
90
- return s && (n.logo_uri = o + s), n;
91
+ return s && (r.logo_uri = o + s), r;
91
92
  }
92
- function C(e, t, o) {
93
- var r;
94
- if (!((r = t.plugins) != null && r.includes("solid")))
93
+ function T(e, t, o) {
94
+ var c;
95
+ if (!((c = t.plugins) != null && c.includes("solid")))
95
96
  return;
96
- const s = p(t, o);
97
+ const s = m(t, o);
97
98
  if (!s)
98
99
  return;
99
- const n = JSON.stringify(s);
100
+ const r = JSON.stringify(s);
100
101
  e.emitFile({
101
102
  type: "asset",
102
103
  fileName: "clientid.jsonld",
103
- source: n
104
+ source: r
104
105
  }), t.additionalManifestEntries.push({
105
106
  url: "clientid.jsonld",
106
- revision: S(n)
107
+ revision: A(r)
107
108
  });
108
109
  }
109
- function E(e, t) {
110
- const o = t.solidClientId ?? !0, s = typeof o != "boolean" ? o : p(e, t), n = {};
111
- return o && s && (n.clientID = s), `export default ${JSON.stringify(n)};`;
110
+ function D(e, t) {
111
+ const o = t.solidClientId ?? !0, s = typeof o != "boolean" ? o : m(e, t), r = {};
112
+ return o && s && (r.clientID = s), `export default ${JSON.stringify(r)};`;
112
113
  }
113
- function k(e, t) {
114
- return (o, s, n) => {
115
- var c;
116
- if (!((c = o.url) != null && c.endsWith("/clientid.jsonld"))) {
117
- n();
114
+ function U(e, t) {
115
+ return (o, s, r) => {
116
+ var i;
117
+ if (!((i = o.url) != null && i.endsWith("/clientid.jsonld"))) {
118
+ r();
118
119
  return;
119
120
  }
120
- const r = p(e, t);
121
- if (!r) {
122
- n();
121
+ const c = m(e, t);
122
+ if (!c) {
123
+ r();
123
124
  return;
124
125
  }
125
- s.statusCode = 200, s.setHeader("Content-Type", "application/ld+json"), s.write(JSON.stringify(r), "utf-8"), s.end();
126
+ s.statusCode = 200, s.setHeader("Content-Type", "application/ld+json"), s.write(JSON.stringify(c), "utf-8"), s.end();
126
127
  };
127
128
  }
128
- function T() {
129
+ function L() {
129
130
  try {
130
- return x("git rev-parse HEAD").toString();
131
+ return $("git rev-parse HEAD").toString();
131
132
  } catch {
132
133
  return "?";
133
134
  }
134
135
  }
135
- const _ = {
136
+ const N = {
136
137
  apng: "image/apng",
137
138
  avif: "image/avif",
138
139
  bmp: "image/bmp",
@@ -150,43 +151,43 @@ const _ = {
150
151
  tiff: "image/tiff",
151
152
  webp: "image/webp"
152
153
  };
153
- function D(e) {
154
+ function v(e) {
154
155
  var o;
155
156
  const t = (o = e.match(/\.([^.]+)$/)) == null ? void 0 : o[1];
156
- return (t && _[t]) ?? null;
157
+ return (t && N[t]) ?? null;
157
158
  }
158
- function g(e, t) {
159
- f(t) && (e.locales = JSON.parse(i(t).toString()));
159
+ function y(e, t) {
160
+ S(t) && (e.locales = JSON.parse(l(t).toString()));
160
161
  }
161
- function U(e) {
162
+ function F(e) {
162
163
  var t;
163
164
  return e.repository ? typeof e.repository == "object" ? e.repository.url.replace(`.${e.repository.type}`, "") : (t = e.repository) == null ? void 0 : t.replace("github:", "https://github.com/") : null;
164
165
  }
165
- function L(e) {
166
+ function R(e) {
166
167
  return Object.keys(e.dependencies ?? {}).filter((t) => t.startsWith("@aerogel/plugin-")).map((t) => t.substring(16));
167
168
  }
168
- function h(e, t) {
169
- if (!f(t))
169
+ function b(e, t) {
170
+ if (!S(t))
170
171
  return;
171
- const o = JSON.parse(i(t).toString()), s = l({
172
+ const o = JSON.parse(l(t).toString()), s = p({
172
173
  version: o.version,
173
- sourceUrl: U(o),
174
- plugins: L(o)
174
+ sourceUrl: F(o),
175
+ plugins: R(o)
175
176
  });
176
177
  Object.assign(e, s);
177
178
  }
178
- function N(e) {
179
- const t = i(e), o = A(t);
179
+ function z(e) {
180
+ const t = l(e), o = I(t);
180
181
  return `
181
182
  <meta property="og:image" content="${e}" />
182
183
  <meta property="og:image:width" content="${o.width}" />
183
184
  <meta property="og:image:height" content="${o.height}" />
184
185
  `;
185
186
  }
186
- function F(e) {
187
+ function B(e) {
187
188
  return `<style>${this.readFile(e)}</style>`;
188
189
  }
189
- function z(e = {}) {
190
+ function V(e = {}) {
190
191
  const t = e.maskIconColor ?? this.app.themeColor;
191
192
  return `
192
193
  <link rel="apple-touch-icon" sizes="180x180" href="${this.app.basePath}apple-touch-icon.png" />
@@ -195,10 +196,10 @@ function z(e = {}) {
195
196
  <link rel="mask-icon" href="${this.app.basePath}safari-pinned-tab.svg" color="${t}" />
196
197
  `;
197
198
  }
198
- function R(e) {
199
+ function W(e) {
199
200
  return `<script>${this.readFile(e)}<\/script>`;
200
201
  }
201
- function B(e = {}) {
202
+ function q(e = {}) {
202
203
  const t = this.app.baseUrl && `<meta property="og:url" content="${this.app.baseUrl}" />`, o = this.app.description && `
203
204
  <meta property="og:description" content="${this.app.description}" />
204
205
  <meta name="description" content="${this.app.description}" />
@@ -212,10 +213,10 @@ function B(e = {}) {
212
213
  <meta property="og:type" content="website" />
213
214
  ${t ?? ""}
214
215
  ${o ?? ""}
215
- ${e.image ? N(e.image) : ""}
216
+ ${e.image ? z(e.image) : ""}
216
217
  `;
217
218
  }
218
- function V() {
219
+ function J() {
219
220
  return `
220
221
  <script>
221
222
  setTimeout(function() {
@@ -228,42 +229,41 @@ function V() {
228
229
  <\/script>
229
230
  `;
230
231
  }
231
- function W(e) {
232
+ function G(e) {
232
233
  return this.readFile(e);
233
234
  }
234
- const q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
235
+ const Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
235
236
  __proto__: null,
236
- css: F,
237
- favicons: z,
238
- js: R,
239
- socialMeta: B,
240
- splashJs: V,
241
- svg: W
237
+ css: B,
238
+ favicons: V,
239
+ js: W,
240
+ socialMeta: q,
241
+ splashJs: J,
242
+ svg: G
242
243
  }, Symbol.toStringTag, { value: "Module" }));
243
- function J(e, t) {
244
+ function K(e, t) {
244
245
  return Function(`with (this) { return ${e} }`).bind({
245
- ...q,
246
+ ...Y,
246
247
  ...t
247
248
  })();
248
249
  }
249
- function G(e, t, o) {
250
- const s = M(e, /{{(.*?)}}/g), n = v(t), r = (c) => i(a(n, c)).toString();
251
- for (const c of s)
250
+ function Q(e, t, o) {
251
+ const s = O(e, /{{(.*?)}}/g), r = M(t), c = (i) => l(u(r, i)).toString();
252
+ for (const i of s)
252
253
  e = e.replace(
253
- c[0],
254
- j(
255
- J(c[1], {
254
+ i[0],
255
+ x(
256
+ K(i[1], {
256
257
  app: o,
257
- readFile: r
258
+ readFile: c
258
259
  })
259
260
  )
260
261
  );
261
262
  return e;
262
263
  }
263
- const Y = Object.keys(
264
+ const X = Object.keys(
264
265
  {
265
266
  "../../../core/src/components/AppLayout.vue": 0,
266
- "../../../core/src/components/AppModals.vue": 0,
267
267
  "../../../core/src/components/AppOverlays.vue": 0,
268
268
  "../../../core/src/components/AppToasts.vue": 0,
269
269
  "../../../core/src/components/headless/HeadlessButton.vue": 0,
@@ -292,7 +292,13 @@ const Y = Object.keys(
292
292
  "../../../core/src/components/ui/AlertModal.vue": 0,
293
293
  "../../../core/src/components/ui/Button.vue": 0,
294
294
  "../../../core/src/components/ui/Checkbox.vue": 0,
295
+ "../../../core/src/components/ui/Combobox.vue": 0,
296
+ "../../../core/src/components/ui/ComboboxLabel.vue": 0,
297
+ "../../../core/src/components/ui/ComboboxOption.vue": 0,
298
+ "../../../core/src/components/ui/ComboboxOptions.vue": 0,
299
+ "../../../core/src/components/ui/ComboboxTrigger.vue": 0,
295
300
  "../../../core/src/components/ui/ConfirmModal.vue": 0,
301
+ "../../../core/src/components/ui/Details.vue": 0,
296
302
  "../../../core/src/components/ui/DropdownMenu.vue": 0,
297
303
  "../../../core/src/components/ui/DropdownMenuOption.vue": 0,
298
304
  "../../../core/src/components/ui/DropdownMenuOptions.vue": 0,
@@ -309,7 +315,6 @@ const Y = Object.keys(
309
315
  "../../../core/src/components/ui/LoadingModal.vue": 0,
310
316
  "../../../core/src/components/ui/Markdown.vue": 0,
311
317
  "../../../core/src/components/ui/Modal.vue": 0,
312
- "../../../core/src/components/ui/ModalContext.vue": 0,
313
318
  "../../../core/src/components/ui/ProgressBar.vue": 0,
314
319
  "../../../core/src/components/ui/PromptModal.vue": 0,
315
320
  "../../../core/src/components/ui/Select.vue": 0,
@@ -322,12 +327,13 @@ const Y = Object.keys(
322
327
  "../../../core/src/components/ui/StartupCrash.vue": 0,
323
328
  "../../../core/src/components/ui/Switch.vue": 0,
324
329
  "../../../core/src/components/ui/TextArea.vue": 0,
325
- "../../../core/src/components/ui/Toast.vue": 0
330
+ "../../../core/src/components/ui/Toast.vue": 0,
331
+ "../../../core/src/components/vue/Provide.vue": 0
326
332
  }
327
333
  ).map((e) => {
328
334
  var t;
329
335
  return ((t = e.split("/").pop()) == null ? void 0 : t.replace(".vue", "")) ?? "";
330
- }), K = Object.keys(
336
+ }), Z = Object.keys(
331
337
  {
332
338
  "../../../plugin-solid/src/components/SolidAvatar.vue": 0,
333
339
  "../../../plugin-solid/src/components/SolidImage.vue": 0,
@@ -336,7 +342,7 @@ const Y = Object.keys(
336
342
  ).map((e) => {
337
343
  var t;
338
344
  return ((t = e.split("/").pop()) == null ? void 0 : t.replace(".vue", "")) ?? "";
339
- }), Q = Object.keys(
345
+ }), ee = Object.keys(
340
346
  {
341
347
  "../../../plugin-local-first/src/components/Account.vue": 0,
342
348
  "../../../plugin-local-first/src/components/AccountLoggedIn.vue": 0,
@@ -348,7 +354,7 @@ const Y = Object.keys(
348
354
  ).map((e) => {
349
355
  var t;
350
356
  return ((t = e.split("/").pop()) == null ? void 0 : t.replace(".vue", "")) ?? "";
351
- }), X = Object.keys(
357
+ }), te = Object.keys(
352
358
  {
353
359
  "../../../plugin-routing/src/components/Page.vue": 0
354
360
  }
@@ -356,31 +362,32 @@ const Y = Object.keys(
356
362
  var t;
357
363
  return ((t = e.split("/").pop()) == null ? void 0 : t.replace(".vue", "")) ?? "";
358
364
  });
359
- function ae() {
365
+ function pe() {
360
366
  return {
361
367
  type: "component",
362
368
  resolve: (e) => {
363
- if (Y.includes(e))
369
+ if (X.includes(e))
364
370
  return { name: e, as: e, from: "@aerogel/core" };
365
- if (K.includes(e))
371
+ if (Z.includes(e))
366
372
  return { name: e, as: e, from: "@aerogel/plugin-solid" };
367
- if (Q.includes(e))
373
+ if (ee.includes(e))
368
374
  return { name: e, as: e, from: "@aerogel/plugin-local-first" };
369
- if (X.includes(e))
375
+ if (te.includes(e))
370
376
  return { name: e, as: e, from: "@aerogel/plugin-routing" };
371
377
  }
372
378
  };
373
379
  }
374
- function le(e = {}) {
380
+ function me(e = {}) {
381
+ var r, c, i;
375
382
  const t = {
376
383
  name: e.name ?? "App",
377
384
  version: "?",
378
- sourceHash: T(),
385
+ sourceHash: L(),
379
386
  description: e.description,
380
387
  basePath: "/",
381
- baseUrl: e.baseUrl,
388
+ baseUrl: process.env.AEROGEL_BASE_URL ?? e.baseUrl,
382
389
  themeColor: e.themeColor ?? "#ffffff",
383
- additionalManifestEntries: []
390
+ additionalManifestEntries: ((r = e.pwa) == null ? void 0 : r.additionalManifestEntries) ?? []
384
391
  }, o = {
385
392
  "virtual:aerogel"() {
386
393
  const n = {
@@ -393,57 +400,62 @@ function le(e = {}) {
393
400
  };
394
401
  return `export default ${JSON.stringify(n)};`;
395
402
  },
396
- "virtual:aerogel-solid": () => E(t, e)
403
+ "virtual:aerogel-solid": () => D(t, e)
397
404
  }, s = {
398
405
  name: "vite:aerogel",
399
406
  buildStart(n) {
400
- !Array.isArray(n.input) || !n.input[0] || (h(t, a(n.input[0], "../package.json")), g(t, a(n.input[0], "../src/lang/locales.json")));
407
+ !Array.isArray(n.input) || !n.input[0] || (b(t, u(n.input[0], "../package.json")), y(t, u(n.input[0], "../src/lang/locales.json")));
401
408
  },
402
409
  configureServer(n) {
403
- var r;
404
- (r = n.httpServer) == null || r.once("listening", async () => {
405
- var c, u, m, d;
406
- await O({ ms: 100 }), t.baseUrl = ((u = (c = n.resolvedUrls) == null ? void 0 : c.network) == null ? void 0 : u[0]) ?? ((d = (m = n.resolvedUrls) == null ? void 0 : m.local) == null ? void 0 : d[0]) ?? t.baseUrl;
407
- }), n.middlewares.use(k(t, e)), h(t, `${n.config.root}/package.json`), g(t, `${n.config.root}/src/lang/locales.json`);
410
+ var a;
411
+ (a = n.httpServer) == null || a.once("listening", async () => {
412
+ var d, g, h, f;
413
+ await E({ ms: 100 }), t.baseUrl = ((g = (d = n.resolvedUrls) == null ? void 0 : d.network) == null ? void 0 : g[0]) ?? ((f = (h = n.resolvedUrls) == null ? void 0 : h.local) == null ? void 0 : f[0]) ?? t.baseUrl;
414
+ }), n.middlewares.use(U(t, e)), b(t, `${n.config.root}/package.json`), y(t, `${n.config.root}/src/lang/locales.json`);
408
415
  },
409
416
  config: (n) => (t.basePath = n.base ?? t.basePath, n.optimizeDeps = n.optimizeDeps ?? {}, n.optimizeDeps.exclude = [...n.optimizeDeps.exclude ?? [], ...Object.keys(o)], n.define = {
410
417
  ...n.define ?? {},
411
418
  __AEROGEL_ENV__: JSON.stringify(process.env.NODE_ENV)
412
419
  }, n),
413
420
  generateBundle() {
414
- P(this, t, e), C(this, t, e);
421
+ _(this, t, e), T(this, t, e);
415
422
  },
416
423
  load: (n) => {
417
- var r;
418
- return (r = o[n]) == null ? void 0 : r.call(o);
424
+ var a;
425
+ return (a = o[n]) == null ? void 0 : a.call(o);
419
426
  },
420
427
  resolveId: (n) => n in o ? n : void 0,
421
428
  transformIndexHtml: {
422
429
  order: "pre",
423
- handler: (n, r) => G(n, r.filename, t)
430
+ handler: (n, a) => Q(n, a.filename, t)
424
431
  }
425
432
  };
426
- return w([
427
- b(),
428
- y(),
433
+ return C([
434
+ j(),
435
+ w(),
429
436
  !e.lib && H({
430
437
  registerType: "autoUpdate",
438
+ devOptions: { enabled: ((c = e.pwa) == null ? void 0 : c.development) ?? !1 },
431
439
  includeAssets: [
432
440
  "apple-touch-icon.png",
433
441
  "favicon-32x32.png",
434
442
  "favicon-16x16.png",
435
- "safari-pinned-tab.svg"
443
+ "safari-pinned-tab.svg",
444
+ ...((i = e.pwa) == null ? void 0 : i.includeAssets) ?? []
436
445
  ],
437
- manifest: l({
446
+ manifest: p({
438
447
  name: t.name,
439
448
  short_name: t.name,
440
449
  description: t.description,
441
450
  theme_color: e.themeColor,
442
- icons: e.icons && Object.entries(e.icons).map(([n, r]) => l({
443
- src: r,
451
+ icons: e.icons && (Array.isArray(e.icons) ? e.icons.map((n) => ({
452
+ ...n,
453
+ type: n.type ?? v(n.src) ?? void 0
454
+ })) : Object.entries(e.icons).map(([n, a]) => p({
455
+ src: a,
444
456
  sizes: n,
445
- type: D(r)
446
- }))
457
+ type: v(a) ?? void 0
458
+ })))
447
459
  }),
448
460
  workbox: {
449
461
  maximumFileSizeToCacheInBytes: 1e7,
@@ -454,7 +466,7 @@ function le(e = {}) {
454
466
  ]).flat();
455
467
  }
456
468
  export {
457
- ae as AerogelResolver,
458
- le as default
469
+ pe as AerogelResolver,
470
+ me as default
459
471
  };
460
472
  //# sourceMappingURL=aerogel-vite.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aerogel-vite.js","sources":["../src/templates/404.html?raw","../src/lib/404.ts","../src/lib/solid.ts","../src/lib/git.ts","../src/lib/media-types.ts","../src/lib/lang.ts","../src/lib/package-parser.ts","../src/lib/html-eval.ts","../src/lib/html.ts","../src/resolvers/AerogelResolver.ts","../src/index.ts"],"sourcesContent":["export default \"<!DOCTYPE html>\\n<html lang=\\\"en\\\">\\n <head>\\n <meta charset=\\\"UTF-8\\\" />\\n <link rel=\\\"icon\\\" href=\\\"/favicon.ico\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <title>{{ app.name }}</title>\\n <script>\\n (function () {\\n const basePath = '{{{ app.basePath }}}';\\n const url = new URL(location.href);\\n\\n if (!url.pathname.startsWith(basePath)) {\\n const link = document.createElement('link');\\n\\n link.rel = 'stylesheet';\\n link.href = 'https://cdn.simplecss.org/simple.min.css';\\n\\n document.head.appendChild(link);\\n\\n return;\\n }\\n\\n const queryParameters = {};\\n\\n url.searchParams.forEach((value, key) => (queryParameters[key] = value));\\n\\n localStorage.setItem(\\n 'static-404-redirect',\\n JSON.stringify({\\n path: url.pathname.substring(basePath.length - 1),\\n hash: url.hash,\\n query: queryParameters,\\n })\\n );\\n\\n location.href = basePath;\\n })();\\n </script>\\n\\n <style>\\n body {\\n width: 100vw;\\n height: 100vh;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n }\\n </style>\\n </head>\\n <body>\\n <h1>404 | Page not found</h1>\\n <a href=\\\"/\\\">go home</a>\\n </body>\\n</html>\\n\"","import Mustache from 'mustache';\nimport type { PluginContext } from 'rollup';\n\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\n\nimport static404RedirectHTML from '../templates/404.html?raw';\n\nexport function generate404Assets(context: PluginContext, app: AppInfo, options: Options): void {\n const static404Redirect = options.static404Redirect ?? process.env.NODE_ENV === 'production';\n\n if (options.lib || !static404Redirect) {\n return;\n }\n\n context.emitFile({\n type: 'asset',\n fileName: typeof options.static404Redirect === 'string' ? options.static404Redirect : '404.html',\n source: Mustache.render(static404RedirectHTML, { app }),\n });\n}\n","import { md5 } from '@noeldemartin/utils';\nimport type { Connect } from 'vite';\nimport type { PluginContext } from 'rollup';\n\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\n\nimport type { VirtualAerogelSolid } from 'virtual:aerogel-solid';\n\nfunction createClientIDDocument(app: AppInfo, options: Options): ClientIDDocument | null {\n if (!app.baseUrl) {\n // eslint-disable-next-line no-console\n console.warn(\n 'It was not possible to create a Solid ClientID document because the baseUrl ' +\n 'was not provided, to remove this warning add a `baseUrl` option in the Aerogel vite plugin options.',\n );\n\n return null;\n }\n\n const baseUrl = app.baseUrl.endsWith('/') ? app.baseUrl : `${app.baseUrl}/`;\n const logoPublicPath = options.icons && (options.icons['512x512'] ?? Object.values(options.icons).pop());\n const clientID: ClientIDDocument = {\n '@context': 'https://www.w3.org/ns/solid/oidc-context.jsonld',\n 'client_id': `${baseUrl}clientid.jsonld`,\n 'client_name': app.name,\n 'redirect_uris': [baseUrl],\n 'client_uri': baseUrl,\n 'scope': 'openid profile offline_access webid',\n 'grant_types': ['refresh_token', 'authorization_code'],\n 'response_types': ['code'],\n };\n\n if (logoPublicPath) {\n clientID.logo_uri = baseUrl + logoPublicPath;\n }\n\n return clientID;\n}\n\nexport interface ClientIDDocument {\n '@context': 'https://www.w3.org/ns/solid/oidc-context.jsonld';\n client_id: string;\n client_name: string;\n redirect_uris: [string, ...string[]];\n client_uri: string;\n logo_uri?: string;\n scope: string;\n grant_types: string[];\n response_types: string[];\n}\n\nexport function generateSolidAssets(context: PluginContext, app: AppInfo, options: Options): void {\n if (!app.plugins?.includes('solid')) {\n return;\n }\n\n const clientID = createClientIDDocument(app, options);\n\n if (!clientID) {\n return;\n }\n\n const clientIdJSON = JSON.stringify(clientID);\n\n context.emitFile({\n type: 'asset',\n fileName: 'clientid.jsonld',\n source: clientIdJSON,\n });\n\n app.additionalManifestEntries.push({\n url: 'clientid.jsonld',\n revision: md5(clientIdJSON),\n });\n}\n\nexport function generateSolidVirtualModule(app: AppInfo, options: Options): string {\n const clientId = options.solidClientId ?? true;\n const clientIdDocument = typeof clientId !== 'boolean' ? clientId : createClientIDDocument(app, options);\n const virtual: VirtualAerogelSolid = {};\n\n if (clientId && clientIdDocument) {\n virtual.clientID = clientIdDocument;\n }\n\n return `export default ${JSON.stringify(virtual)};`;\n}\n\nexport function solidMiddleware(app: AppInfo, options: Options): Connect.NextHandleFunction {\n return (request, response, next) => {\n if (!request.url?.endsWith('/clientid.jsonld')) {\n next();\n\n return;\n }\n\n const clientID = createClientIDDocument(app, options);\n\n if (!clientID) {\n next();\n\n return;\n }\n\n response.statusCode = 200;\n response.setHeader('Content-Type', 'application/ld+json');\n response.write(JSON.stringify(clientID), 'utf-8');\n response.end();\n };\n}\n","import { execSync } from 'node:child_process';\n\nexport function getSourceHash(): string {\n try {\n return execSync('git rev-parse HEAD').toString();\n } catch (e) {\n return '?';\n }\n}\n","// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#common_image_file_types\nconst mediaTypeByExtension: Record<string, string> = {\n apng: 'image/apng',\n avif: 'image/avif',\n bmp: 'image/bmp',\n cur: 'image/x-icon',\n gif: 'image/gif',\n ico: 'image/x-icon',\n jfif: 'image/jpeg',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n pjp: 'image/jpeg',\n pjpeg: 'image/jpeg',\n png: 'image/png',\n svg: 'image/svg',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n};\n\nexport function guessMediaType(filename: string): string | null {\n const extension = filename.match(/\\.([^.]+)$/)?.[1];\n\n return (extension && mediaTypeByExtension[extension]) ?? null;\n}\n","import { existsSync, readFileSync } from 'node:fs';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nexport function loadLocales(app: AppInfo, localesJsonPath: string): void {\n if (!existsSync(localesJsonPath)) {\n return;\n }\n\n app.locales = JSON.parse(readFileSync(localesJsonPath).toString()) as Record<string, string>;\n}\n","import { existsSync, readFileSync } from 'node:fs';\n\nimport { objectWithoutEmpty } from '@noeldemartin/utils';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\ninterface PackageJson {\n version: string;\n repository?: string | { type: string; url: string };\n dependencies?: Record<string, string>;\n}\n\nfunction getSourceUrl(packageJson: PackageJson): string | null {\n if (!packageJson.repository) {\n return null;\n }\n\n if (typeof packageJson.repository === 'object') {\n return packageJson.repository.url.replace(`.${packageJson.repository.type}`, '');\n }\n\n return packageJson.repository?.replace('github:', 'https://github.com/');\n}\n\nfunction getPlugins(packageJson: PackageJson): string[] {\n return Object.keys(packageJson.dependencies ?? {})\n .filter((dependency) => dependency.startsWith('@aerogel/plugin-'))\n .map((plugin) => plugin.substring(16));\n}\n\nexport function loadPackageInfo(app: AppInfo, packageJsonPath: string): void {\n if (!existsSync(packageJsonPath)) {\n return;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath).toString()) as PackageJson;\n const parsed: Partial<AppInfo> = objectWithoutEmpty({\n version: packageJson.version,\n sourceUrl: getSourceUrl(packageJson),\n plugins: getPlugins(packageJson),\n });\n\n Object.assign(app, parsed);\n}\n","import imageSize from 'image-size';\nimport { readFileSync } from 'node:fs';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nfunction imageMeta(path: string): string {\n const image = readFileSync(path);\n const size = imageSize(image);\n\n return `\n <meta property=\"og:image\" content=\"${path}\" />\n <meta property=\"og:image:width\" content=\"${size.width}\" />\n <meta property=\"og:image:height\" content=\"${size.height}\" />\n `;\n}\n\nexport interface HTMLEvalScope {\n app: AppInfo;\n readFile(path: string): string;\n}\n\nexport function css(this: HTMLEvalScope, path: string): string {\n return `<style>${this.readFile(path)}</style>`;\n}\n\nexport function favicons(this: HTMLEvalScope, options: { maskIconColor?: string } = {}): string {\n const maskIconColor = options.maskIconColor ?? this.app.themeColor;\n\n return `\n <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"${this.app.basePath}apple-touch-icon.png\" />\n <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"${this.app.basePath}favicon-32x32.png\" />\n <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"${this.app.basePath}favicon-16x16.png\" />\n <link rel=\"mask-icon\" href=\"${this.app.basePath}safari-pinned-tab.svg\" color=\"${maskIconColor}\" />\n `;\n}\n\nexport function js(this: HTMLEvalScope, path: string): string {\n return `<script>${this.readFile(path)}</script>`;\n}\n\nexport function socialMeta(this: HTMLEvalScope, options: { image?: string } = {}): string {\n const urlMeta = this.app.baseUrl && `<meta property=\"og:url\" content=\"${this.app.baseUrl}\" />`;\n const descriptionMeta =\n this.app.description &&\n `\n <meta property=\"og:description\" content=\"${this.app.description}\" />\n <meta name=\"description\" content=\"${this.app.description}\" />\n `;\n\n return `\n <meta name=\"apple-mobile-web-app-title\" content=\"${this.app.name}\" />\n <meta name=\"application-name\" content=\"${this.app.name}\" />\n <meta name=\"msapplication-TileColor\" content=\"${this.app.themeColor}\" />\n <meta name=\"theme-color\" content=\"${this.app.themeColor}\" />\n <meta property=\"og:title\" content=\"${this.app.name}\" />\n <meta property=\"og:type\" content=\"website\" />\n ${urlMeta ?? ''}\n ${descriptionMeta ?? ''}\n ${options.image ? imageMeta(options.image) : ''}\n `;\n}\n\nexport function splashJs(): string {\n return `\n <script>\n setTimeout(function() {\n if (!document.querySelector('#app.loading')) {\n return;\n }\n\n document.getElementById('splash').style.opacity = 1;\n }, 1000);\n </script>\n `;\n}\n\nexport function svg(this: HTMLEvalScope, path: string): string {\n return this.readFile(path);\n}\n","import { dirname, resolve } from 'node:path';\nimport { readFileSync } from 'node:fs';\n\nimport { stringMatchAll, toString } from '@noeldemartin/utils';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nimport * as globalScope from './html-eval';\nimport type { HTMLEvalScope } from './html-eval';\n\nfunction evalScript(script: string, scope: HTMLEvalScope): unknown {\n return Function(`with (this) { return ${script} }`).bind({\n ...globalScope,\n ...scope,\n })();\n}\n\nexport function renderHTML(html: string, filename: string, app: AppInfo): string {\n const matches = stringMatchAll<2>(html, /{{(.*?)}}/g);\n const directory = dirname(filename);\n const readFile = (path: string) => readFileSync(resolve(directory, path)).toString();\n\n for (const match of matches) {\n html = html.replace(\n match[0],\n toString(\n evalScript(match[1], {\n app,\n readFile,\n }),\n ),\n );\n }\n\n return html;\n}\n","import type { ComponentResolver } from 'unplugin-vue-components';\n\nconst coreComponents = Object.keys(\n import.meta.glob('../../../core/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst solidComponents = Object.keys(\n import.meta.glob('../../../plugin-solid/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst localFirstComponents = Object.keys(\n import.meta.glob('../../../plugin-local-first/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst routingComponents = Object.keys(\n import.meta.glob('../../../plugin-routing/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nexport default function AerogelResolver(): ComponentResolver {\n return {\n type: 'component',\n resolve: (name) => {\n if (coreComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/core' };\n }\n\n if (solidComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-solid' };\n }\n\n if (localFirstComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-local-first' };\n }\n\n if (routingComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-routing' };\n }\n },\n };\n}\n","import { resolve } from 'node:path';\nimport type { VirtualAerogel } from 'virtual:aerogel';\n\nimport TailwindCSS from '@tailwindcss/vite';\nimport Vue from '@vitejs/plugin-vue';\nimport { after, arrayFilter, objectWithoutEmpty } from '@noeldemartin/utils';\nimport { VitePWA } from 'vite-plugin-pwa';\nimport type { Plugin } from 'vite';\n\nimport { generate404Assets } from '@aerogel/vite/lib/404';\nimport { generateSolidAssets, generateSolidVirtualModule, solidMiddleware } from '@aerogel/vite/lib/solid';\nimport { getSourceHash } from '@aerogel/vite/lib/git';\nimport { guessMediaType } from '@aerogel/vite/lib/media-types';\nimport { loadLocales } from '@aerogel/vite/lib/lang';\nimport { loadPackageInfo } from '@aerogel/vite/lib/package-parser';\nimport { renderHTML } from '@aerogel/vite/lib/html';\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\nimport type { ClientIDDocument } from '@aerogel/vite/lib/solid';\n\nexport type { Options, AppInfo, ClientIDDocument };\n\nexport * from './resolvers';\n\nexport default function Aerogel(options: Options = {}): Plugin[] {\n const app: AppInfo = {\n name: options.name ?? 'App',\n version: '?',\n sourceHash: getSourceHash(),\n description: options.description,\n basePath: '/',\n baseUrl: options.baseUrl,\n themeColor: options.themeColor ?? '#ffffff',\n additionalManifestEntries: [],\n };\n const virtualHandlers: Record<string, () => string> = {\n 'virtual:aerogel'() {\n const virtual: VirtualAerogel = {\n name: app.name,\n version: app.version,\n sourceHash: app.sourceHash,\n basePath: app.basePath,\n sourceUrl: app.sourceUrl,\n locales: app.locales ?? { en: 'English' },\n };\n\n return `export default ${JSON.stringify(virtual)};`;\n },\n 'virtual:aerogel-solid': () => generateSolidVirtualModule(app, options),\n };\n const AerogelPlugin: Plugin = {\n name: 'vite:aerogel',\n buildStart(buildOptions) {\n if (!Array.isArray(buildOptions.input) || !buildOptions.input[0]) {\n return;\n }\n\n loadPackageInfo(app, resolve(buildOptions.input[0], '../package.json'));\n loadLocales(app, resolve(buildOptions.input[0], '../src/lang/locales.json'));\n },\n configureServer(server) {\n server.httpServer?.once('listening', async () => {\n await after({ ms: 100 });\n\n app.baseUrl = server.resolvedUrls?.network?.[0] ?? server.resolvedUrls?.local?.[0] ?? app.baseUrl;\n });\n\n server.middlewares.use(solidMiddleware(app, options));\n\n loadPackageInfo(app, `${server.config.root}/package.json`);\n loadLocales(app, `${server.config.root}/src/lang/locales.json`);\n },\n config: (config) => {\n app.basePath = config.base ?? app.basePath;\n config.optimizeDeps = config.optimizeDeps ?? {};\n config.optimizeDeps.exclude = [...(config.optimizeDeps.exclude ?? []), ...Object.keys(virtualHandlers)];\n\n config.define = {\n ...(config.define ?? {}),\n __AEROGEL_ENV__: JSON.stringify(process.env.NODE_ENV),\n };\n\n return config;\n },\n generateBundle() {\n generate404Assets(this, app, options);\n generateSolidAssets(this, app, options);\n },\n load: (id) => virtualHandlers[id]?.(),\n resolveId: (id) => (id in virtualHandlers ? id : undefined),\n transformIndexHtml: {\n order: 'pre',\n handler: (html, context) => renderHTML(html, context.filename, app),\n },\n };\n\n return arrayFilter([\n Vue(),\n TailwindCSS(),\n !options.lib &&\n VitePWA({\n registerType: 'autoUpdate',\n includeAssets: [\n 'apple-touch-icon.png',\n 'favicon-32x32.png',\n 'favicon-16x16.png',\n 'safari-pinned-tab.svg',\n ],\n manifest: objectWithoutEmpty({\n name: app.name,\n short_name: app.name,\n description: app.description,\n theme_color: options.themeColor,\n icons:\n options.icons &&\n Object.entries(options.icons).map(([sizes, src]) =>\n objectWithoutEmpty({\n src,\n sizes,\n type: guessMediaType(src),\n })),\n }),\n workbox: {\n maximumFileSizeToCacheInBytes: 10000000,\n additionalManifestEntries: app.additionalManifestEntries,\n },\n }),\n AerogelPlugin,\n ]).flat();\n}\n"],"names":["static404RedirectHTML","generate404Assets","context","app","options","static404Redirect","Mustache","createClientIDDocument","baseUrl","logoPublicPath","clientID","generateSolidAssets","_a","clientIdJSON","md5","generateSolidVirtualModule","clientId","clientIdDocument","virtual","solidMiddleware","request","response","next","getSourceHash","execSync","mediaTypeByExtension","guessMediaType","filename","extension","loadLocales","localesJsonPath","existsSync","readFileSync","getSourceUrl","packageJson","getPlugins","dependency","plugin","loadPackageInfo","packageJsonPath","parsed","objectWithoutEmpty","imageMeta","path","image","size","imageSize","css","favicons","maskIconColor","js","socialMeta","urlMeta","descriptionMeta","splashJs","svg","evalScript","script","scope","globalScope","renderHTML","html","matches","stringMatchAll","directory","dirname","readFile","resolve","match","toString","coreComponents","solidComponents","localFirstComponents","routingComponents","AerogelResolver","name","Aerogel","virtualHandlers","AerogelPlugin","buildOptions","server","after","_b","_d","_c","config","id","arrayFilter","Vue","TailwindCSS","VitePWA","sizes","src"],"mappings":"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"}
1
+ {"version":3,"file":"aerogel-vite.js","sources":["../src/templates/404.html?raw","../src/lib/404.ts","../src/lib/solid.ts","../src/lib/git.ts","../src/lib/media-types.ts","../src/lib/lang.ts","../src/lib/package-parser.ts","../src/lib/html-eval.ts","../src/lib/html.ts","../src/resolvers/AerogelResolver.ts","../src/index.ts"],"sourcesContent":["export default \"<!DOCTYPE html>\\n<html lang=\\\"en\\\">\\n <head>\\n <meta charset=\\\"UTF-8\\\" />\\n <link rel=\\\"icon\\\" href=\\\"/favicon.ico\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <title>{{ app.name }}</title>\\n <script>\\n (function () {\\n const basePath = '{{{ app.basePath }}}';\\n const url = new URL(location.href);\\n\\n if (!url.pathname.startsWith(basePath)) {\\n const link = document.createElement('link');\\n\\n link.rel = 'stylesheet';\\n link.href = 'https://cdn.simplecss.org/simple.min.css';\\n\\n document.head.appendChild(link);\\n\\n return;\\n }\\n\\n const queryParameters = {};\\n\\n url.searchParams.forEach((value, key) => (queryParameters[key] = value));\\n\\n localStorage.setItem(\\n 'static-404-redirect',\\n JSON.stringify({\\n path: url.pathname.substring(basePath.length - 1),\\n hash: url.hash,\\n query: queryParameters,\\n })\\n );\\n\\n location.href = basePath;\\n })();\\n </script>\\n\\n <style>\\n body {\\n width: 100vw;\\n height: 100vh;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n }\\n </style>\\n </head>\\n <body>\\n <h1>404 | Page not found</h1>\\n <a href=\\\"/\\\">go home</a>\\n </body>\\n</html>\\n\"","import Mustache from 'mustache';\nimport type { PluginContext } from 'rollup';\n\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\n\nimport static404RedirectHTML from '../templates/404.html?raw';\n\nexport function generate404Assets(context: PluginContext, app: AppInfo, options: Options): void {\n const static404Redirect = options.static404Redirect ?? process.env.NODE_ENV === 'production';\n\n if (options.lib || !static404Redirect) {\n return;\n }\n\n context.emitFile({\n type: 'asset',\n fileName: typeof options.static404Redirect === 'string' ? options.static404Redirect : '404.html',\n source: Mustache.render(static404RedirectHTML, { app }),\n });\n}\n","import { md5 } from '@noeldemartin/utils';\nimport type { Connect } from 'vite';\nimport type { PluginContext } from 'rollup';\n\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\n\nimport type { VirtualAerogelSolid } from 'virtual:aerogel-solid';\n\nfunction createClientIDDocument(app: AppInfo, options: Options): ClientIDDocument | null {\n if (!app.baseUrl) {\n // eslint-disable-next-line no-console\n console.warn(\n 'It was not possible to create a Solid ClientID document because the baseUrl ' +\n 'was not provided, to remove this warning add a `baseUrl` option in the Aerogel vite plugin options.',\n );\n\n return null;\n }\n\n const baseUrl = app.baseUrl.endsWith('/') ? app.baseUrl : `${app.baseUrl}/`;\n const logoPublicPath =\n options.icons &&\n (Array.isArray(options.icons)\n ? options.icons[0]?.src\n : (options.icons['512x512'] ?? Object.values(options.icons).pop()));\n const clientID: ClientIDDocument = {\n '@context': 'https://www.w3.org/ns/solid/oidc-context.jsonld',\n 'client_id': `${baseUrl}clientid.jsonld`,\n 'client_name': app.name,\n 'redirect_uris': [baseUrl],\n 'client_uri': baseUrl,\n 'scope': 'openid profile offline_access webid',\n 'grant_types': ['refresh_token', 'authorization_code'],\n 'response_types': ['code'],\n };\n\n if (logoPublicPath) {\n clientID.logo_uri = baseUrl + logoPublicPath;\n }\n\n return clientID;\n}\n\nexport interface ClientIDDocument {\n '@context': 'https://www.w3.org/ns/solid/oidc-context.jsonld';\n client_id: string;\n client_name: string;\n redirect_uris: [string, ...string[]];\n client_uri: string;\n logo_uri?: string;\n scope: string;\n grant_types: string[];\n response_types: string[];\n}\n\nexport function generateSolidAssets(context: PluginContext, app: AppInfo, options: Options): void {\n if (!app.plugins?.includes('solid')) {\n return;\n }\n\n const clientID = createClientIDDocument(app, options);\n\n if (!clientID) {\n return;\n }\n\n const clientIdJSON = JSON.stringify(clientID);\n\n context.emitFile({\n type: 'asset',\n fileName: 'clientid.jsonld',\n source: clientIdJSON,\n });\n\n app.additionalManifestEntries.push({\n url: 'clientid.jsonld',\n revision: md5(clientIdJSON),\n });\n}\n\nexport function generateSolidVirtualModule(app: AppInfo, options: Options): string {\n const clientId = options.solidClientId ?? true;\n const clientIdDocument = typeof clientId !== 'boolean' ? clientId : createClientIDDocument(app, options);\n const virtual: VirtualAerogelSolid = {};\n\n if (clientId && clientIdDocument) {\n virtual.clientID = clientIdDocument;\n }\n\n return `export default ${JSON.stringify(virtual)};`;\n}\n\nexport function solidMiddleware(app: AppInfo, options: Options): Connect.NextHandleFunction {\n return (request, response, next) => {\n if (!request.url?.endsWith('/clientid.jsonld')) {\n next();\n\n return;\n }\n\n const clientID = createClientIDDocument(app, options);\n\n if (!clientID) {\n next();\n\n return;\n }\n\n response.statusCode = 200;\n response.setHeader('Content-Type', 'application/ld+json');\n response.write(JSON.stringify(clientID), 'utf-8');\n response.end();\n };\n}\n","import { execSync } from 'node:child_process';\n\nexport function getSourceHash(): string {\n try {\n return execSync('git rev-parse HEAD').toString();\n } catch (e) {\n return '?';\n }\n}\n","// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#common_image_file_types\nconst mediaTypeByExtension: Record<string, string> = {\n apng: 'image/apng',\n avif: 'image/avif',\n bmp: 'image/bmp',\n cur: 'image/x-icon',\n gif: 'image/gif',\n ico: 'image/x-icon',\n jfif: 'image/jpeg',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n pjp: 'image/jpeg',\n pjpeg: 'image/jpeg',\n png: 'image/png',\n svg: 'image/svg',\n tif: 'image/tiff',\n tiff: 'image/tiff',\n webp: 'image/webp',\n};\n\nexport function guessMediaType(filename: string): string | null {\n const extension = filename.match(/\\.([^.]+)$/)?.[1];\n\n return (extension && mediaTypeByExtension[extension]) ?? null;\n}\n","import { existsSync, readFileSync } from 'node:fs';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nexport function loadLocales(app: AppInfo, localesJsonPath: string): void {\n if (!existsSync(localesJsonPath)) {\n return;\n }\n\n app.locales = JSON.parse(readFileSync(localesJsonPath).toString()) as Record<string, string>;\n}\n","import { existsSync, readFileSync } from 'node:fs';\n\nimport { objectWithoutEmpty } from '@noeldemartin/utils';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\ninterface PackageJson {\n version: string;\n repository?: string | { type: string; url: string };\n dependencies?: Record<string, string>;\n}\n\nfunction getSourceUrl(packageJson: PackageJson): string | null {\n if (!packageJson.repository) {\n return null;\n }\n\n if (typeof packageJson.repository === 'object') {\n return packageJson.repository.url.replace(`.${packageJson.repository.type}`, '');\n }\n\n return packageJson.repository?.replace('github:', 'https://github.com/');\n}\n\nfunction getPlugins(packageJson: PackageJson): string[] {\n return Object.keys(packageJson.dependencies ?? {})\n .filter((dependency) => dependency.startsWith('@aerogel/plugin-'))\n .map((plugin) => plugin.substring(16));\n}\n\nexport function loadPackageInfo(app: AppInfo, packageJsonPath: string): void {\n if (!existsSync(packageJsonPath)) {\n return;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath).toString()) as PackageJson;\n const parsed: Partial<AppInfo> = objectWithoutEmpty({\n version: packageJson.version,\n sourceUrl: getSourceUrl(packageJson),\n plugins: getPlugins(packageJson),\n });\n\n Object.assign(app, parsed);\n}\n","import imageSize from 'image-size';\nimport { readFileSync } from 'node:fs';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nfunction imageMeta(path: string): string {\n const image = readFileSync(path);\n const size = imageSize(image);\n\n return `\n <meta property=\"og:image\" content=\"${path}\" />\n <meta property=\"og:image:width\" content=\"${size.width}\" />\n <meta property=\"og:image:height\" content=\"${size.height}\" />\n `;\n}\n\nexport interface HTMLEvalScope {\n app: AppInfo;\n readFile(path: string): string;\n}\n\nexport function css(this: HTMLEvalScope, path: string): string {\n return `<style>${this.readFile(path)}</style>`;\n}\n\nexport function favicons(this: HTMLEvalScope, options: { maskIconColor?: string } = {}): string {\n const maskIconColor = options.maskIconColor ?? this.app.themeColor;\n\n return `\n <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"${this.app.basePath}apple-touch-icon.png\" />\n <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"${this.app.basePath}favicon-32x32.png\" />\n <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"${this.app.basePath}favicon-16x16.png\" />\n <link rel=\"mask-icon\" href=\"${this.app.basePath}safari-pinned-tab.svg\" color=\"${maskIconColor}\" />\n `;\n}\n\nexport function js(this: HTMLEvalScope, path: string): string {\n return `<script>${this.readFile(path)}</script>`;\n}\n\nexport function socialMeta(this: HTMLEvalScope, options: { image?: string } = {}): string {\n const urlMeta = this.app.baseUrl && `<meta property=\"og:url\" content=\"${this.app.baseUrl}\" />`;\n const descriptionMeta =\n this.app.description &&\n `\n <meta property=\"og:description\" content=\"${this.app.description}\" />\n <meta name=\"description\" content=\"${this.app.description}\" />\n `;\n\n return `\n <meta name=\"apple-mobile-web-app-title\" content=\"${this.app.name}\" />\n <meta name=\"application-name\" content=\"${this.app.name}\" />\n <meta name=\"msapplication-TileColor\" content=\"${this.app.themeColor}\" />\n <meta name=\"theme-color\" content=\"${this.app.themeColor}\" />\n <meta property=\"og:title\" content=\"${this.app.name}\" />\n <meta property=\"og:type\" content=\"website\" />\n ${urlMeta ?? ''}\n ${descriptionMeta ?? ''}\n ${options.image ? imageMeta(options.image) : ''}\n `;\n}\n\nexport function splashJs(): string {\n return `\n <script>\n setTimeout(function() {\n if (!document.querySelector('#app.loading')) {\n return;\n }\n\n document.getElementById('splash').style.opacity = 1;\n }, 1000);\n </script>\n `;\n}\n\nexport function svg(this: HTMLEvalScope, path: string): string {\n return this.readFile(path);\n}\n","import { dirname, resolve } from 'node:path';\nimport { readFileSync } from 'node:fs';\n\nimport { stringMatchAll, toString } from '@noeldemartin/utils';\n\nimport type { AppInfo } from '@aerogel/vite/lib/options';\n\nimport * as globalScope from './html-eval';\nimport type { HTMLEvalScope } from './html-eval';\n\nfunction evalScript(script: string, scope: HTMLEvalScope): unknown {\n return Function(`with (this) { return ${script} }`).bind({\n ...globalScope,\n ...scope,\n })();\n}\n\nexport function renderHTML(html: string, filename: string, app: AppInfo): string {\n const matches = stringMatchAll<2>(html, /{{(.*?)}}/g);\n const directory = dirname(filename);\n const readFile = (path: string) => readFileSync(resolve(directory, path)).toString();\n\n for (const match of matches) {\n html = html.replace(\n match[0],\n toString(\n evalScript(match[1], {\n app,\n readFile,\n }),\n ),\n );\n }\n\n return html;\n}\n","import type { ComponentResolver } from 'unplugin-vue-components';\n\nconst coreComponents = Object.keys(\n import.meta.glob('../../../core/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst solidComponents = Object.keys(\n import.meta.glob('../../../plugin-solid/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst localFirstComponents = Object.keys(\n import.meta.glob('../../../plugin-local-first/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nconst routingComponents = Object.keys(\n import.meta.glob('../../../plugin-routing/src/components/**/*.vue', {\n eager: true,\n query: '?ignore',\n }),\n).map((filename) => filename.split('/').pop()?.replace('.vue', '') ?? '');\n\nexport default function AerogelResolver(): ComponentResolver {\n return {\n type: 'component',\n resolve: (name) => {\n if (coreComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/core' };\n }\n\n if (solidComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-solid' };\n }\n\n if (localFirstComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-local-first' };\n }\n\n if (routingComponents.includes(name)) {\n return { name, as: name, from: '@aerogel/plugin-routing' };\n }\n },\n };\n}\n","import { resolve } from 'node:path';\nimport type { VirtualAerogel } from 'virtual:aerogel';\n\nimport TailwindCSS from '@tailwindcss/vite';\nimport Vue from '@vitejs/plugin-vue';\nimport { after, arrayFilter, objectWithoutEmpty } from '@noeldemartin/utils';\nimport { VitePWA } from 'vite-plugin-pwa';\nimport type { Plugin } from 'vite';\n\nimport { generate404Assets } from '@aerogel/vite/lib/404';\nimport { generateSolidAssets, generateSolidVirtualModule, solidMiddleware } from '@aerogel/vite/lib/solid';\nimport { getSourceHash } from '@aerogel/vite/lib/git';\nimport { guessMediaType } from '@aerogel/vite/lib/media-types';\nimport { loadLocales } from '@aerogel/vite/lib/lang';\nimport { loadPackageInfo } from '@aerogel/vite/lib/package-parser';\nimport { renderHTML } from '@aerogel/vite/lib/html';\nimport type { AppInfo, Options } from '@aerogel/vite/lib/options';\nimport type { ClientIDDocument } from '@aerogel/vite/lib/solid';\n\nexport type { Options, AppInfo, ClientIDDocument };\n\nexport * from './resolvers';\n\nexport default function Aerogel(options: Options = {}): Plugin[] {\n const app: AppInfo = {\n name: options.name ?? 'App',\n version: '?',\n sourceHash: getSourceHash(),\n description: options.description,\n basePath: '/',\n baseUrl: process.env.AEROGEL_BASE_URL ?? options.baseUrl,\n themeColor: options.themeColor ?? '#ffffff',\n additionalManifestEntries: options.pwa?.additionalManifestEntries ?? [],\n };\n const virtualHandlers: Record<string, () => string> = {\n 'virtual:aerogel'() {\n const virtual: VirtualAerogel = {\n name: app.name,\n version: app.version,\n sourceHash: app.sourceHash,\n basePath: app.basePath,\n sourceUrl: app.sourceUrl,\n locales: app.locales ?? { en: 'English' },\n };\n\n return `export default ${JSON.stringify(virtual)};`;\n },\n 'virtual:aerogel-solid': () => generateSolidVirtualModule(app, options),\n };\n const AerogelPlugin: Plugin = {\n name: 'vite:aerogel',\n buildStart(buildOptions) {\n if (!Array.isArray(buildOptions.input) || !buildOptions.input[0]) {\n return;\n }\n\n loadPackageInfo(app, resolve(buildOptions.input[0], '../package.json'));\n loadLocales(app, resolve(buildOptions.input[0], '../src/lang/locales.json'));\n },\n configureServer(server) {\n server.httpServer?.once('listening', async () => {\n await after({ ms: 100 });\n\n app.baseUrl = server.resolvedUrls?.network?.[0] ?? server.resolvedUrls?.local?.[0] ?? app.baseUrl;\n });\n\n server.middlewares.use(solidMiddleware(app, options));\n\n loadPackageInfo(app, `${server.config.root}/package.json`);\n loadLocales(app, `${server.config.root}/src/lang/locales.json`);\n },\n config: (config) => {\n app.basePath = config.base ?? app.basePath;\n config.optimizeDeps = config.optimizeDeps ?? {};\n config.optimizeDeps.exclude = [...(config.optimizeDeps.exclude ?? []), ...Object.keys(virtualHandlers)];\n\n config.define = {\n ...(config.define ?? {}),\n __AEROGEL_ENV__: JSON.stringify(process.env.NODE_ENV),\n };\n\n return config;\n },\n generateBundle() {\n generate404Assets(this, app, options);\n generateSolidAssets(this, app, options);\n },\n load: (id) => virtualHandlers[id]?.(),\n resolveId: (id) => (id in virtualHandlers ? id : undefined),\n transformIndexHtml: {\n order: 'pre',\n handler: (html, context) => renderHTML(html, context.filename, app),\n },\n };\n\n return arrayFilter([\n Vue(),\n TailwindCSS(),\n !options.lib &&\n VitePWA({\n registerType: 'autoUpdate',\n devOptions: { enabled: options.pwa?.development ?? false },\n includeAssets: [\n 'apple-touch-icon.png',\n 'favicon-32x32.png',\n 'favicon-16x16.png',\n 'safari-pinned-tab.svg',\n ...(options.pwa?.includeAssets ?? []),\n ],\n manifest: objectWithoutEmpty({\n name: app.name,\n short_name: app.name,\n description: app.description,\n theme_color: options.themeColor,\n icons:\n options.icons &&\n (Array.isArray(options.icons)\n ? options.icons.map((icon) => ({\n ...icon,\n type: icon.type ?? guessMediaType(icon.src) ?? undefined,\n }))\n : Object.entries(options.icons).map(([sizes, src]) =>\n objectWithoutEmpty({\n src,\n sizes,\n type: guessMediaType(src) ?? undefined,\n }))),\n }),\n workbox: {\n maximumFileSizeToCacheInBytes: 10000000,\n additionalManifestEntries: app.additionalManifestEntries,\n },\n }),\n AerogelPlugin,\n ]).flat();\n}\n"],"names":["static404RedirectHTML","generate404Assets","context","app","options","static404Redirect","Mustache","createClientIDDocument","baseUrl","logoPublicPath","_a","clientID","generateSolidAssets","clientIdJSON","md5","generateSolidVirtualModule","clientId","clientIdDocument","virtual","solidMiddleware","request","response","next","getSourceHash","execSync","mediaTypeByExtension","guessMediaType","filename","extension","loadLocales","localesJsonPath","existsSync","readFileSync","getSourceUrl","packageJson","getPlugins","dependency","plugin","loadPackageInfo","packageJsonPath","parsed","objectWithoutEmpty","imageMeta","path","image","size","imageSize","css","favicons","maskIconColor","js","socialMeta","urlMeta","descriptionMeta","splashJs","svg","evalScript","script","scope","globalScope","renderHTML","html","matches","stringMatchAll","directory","dirname","readFile","resolve","match","toString","coreComponents","solidComponents","localFirstComponents","routingComponents","AerogelResolver","name","Aerogel","virtualHandlers","AerogelPlugin","buildOptions","server","after","_b","_d","_c","config","id","arrayFilter","Vue","TailwindCSS","VitePWA","icon","sizes","src"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aerogel/vite",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -27,7 +27,7 @@
27
27
  "verify": "noeldemartin-verify"
28
28
  },
29
29
  "dependencies": {
30
- "@noeldemartin/utils": "^0.7.1",
30
+ "@noeldemartin/utils": "0.7.3",
31
31
  "@tailwindcss/vite": "^4.1.4",
32
32
  "@vitejs/plugin-vue": "^5.2.3",
33
33
  "image-size": "^2.0.2",
package/src/index.ts CHANGED
@@ -28,9 +28,9 @@ export default function Aerogel(options: Options = {}): Plugin[] {
28
28
  sourceHash: getSourceHash(),
29
29
  description: options.description,
30
30
  basePath: '/',
31
- baseUrl: options.baseUrl,
31
+ baseUrl: process.env.AEROGEL_BASE_URL ?? options.baseUrl,
32
32
  themeColor: options.themeColor ?? '#ffffff',
33
- additionalManifestEntries: [],
33
+ additionalManifestEntries: options.pwa?.additionalManifestEntries ?? [],
34
34
  };
35
35
  const virtualHandlers: Record<string, () => string> = {
36
36
  'virtual:aerogel'() {
@@ -99,11 +99,13 @@ export default function Aerogel(options: Options = {}): Plugin[] {
99
99
  !options.lib &&
100
100
  VitePWA({
101
101
  registerType: 'autoUpdate',
102
+ devOptions: { enabled: options.pwa?.development ?? false },
102
103
  includeAssets: [
103
104
  'apple-touch-icon.png',
104
105
  'favicon-32x32.png',
105
106
  'favicon-16x16.png',
106
107
  'safari-pinned-tab.svg',
108
+ ...(options.pwa?.includeAssets ?? []),
107
109
  ],
108
110
  manifest: objectWithoutEmpty({
109
111
  name: app.name,
@@ -112,12 +114,17 @@ export default function Aerogel(options: Options = {}): Plugin[] {
112
114
  theme_color: options.themeColor,
113
115
  icons:
114
116
  options.icons &&
115
- Object.entries(options.icons).map(([sizes, src]) =>
116
- objectWithoutEmpty({
117
- src,
118
- sizes,
119
- type: guessMediaType(src),
120
- })),
117
+ (Array.isArray(options.icons)
118
+ ? options.icons.map((icon) => ({
119
+ ...icon,
120
+ type: icon.type ?? guessMediaType(icon.src) ?? undefined,
121
+ }))
122
+ : Object.entries(options.icons).map(([sizes, src]) =>
123
+ objectWithoutEmpty({
124
+ src,
125
+ sizes,
126
+ type: guessMediaType(src) ?? undefined,
127
+ }))),
121
128
  }),
122
129
  workbox: {
123
130
  maximumFileSizeToCacheInBytes: 10000000,
@@ -1,15 +1,21 @@
1
1
  import type { ManifestEntry } from 'workbox-build';
2
2
  import type { ClientIDDocument } from '@aerogel/vite/lib/solid';
3
+ import type { IconResource } from 'vite-plugin-pwa';
3
4
 
4
5
  export interface Options {
5
6
  lib?: boolean;
6
7
  name?: string;
7
8
  description?: string;
8
9
  themeColor?: string;
9
- icons?: Record<string, string>;
10
+ icons?: Record<string, string> | IconResource[];
10
11
  baseUrl?: string;
11
12
  static404Redirect?: boolean | string;
12
13
  solidClientId?: boolean | ClientIDDocument;
14
+ pwa?: {
15
+ development?: boolean;
16
+ includeAssets?: string[];
17
+ additionalManifestEntries?: ManifestEntry[];
18
+ };
13
19
  }
14
20
 
15
21
  export interface AppInfo {
package/src/lib/solid.ts CHANGED
@@ -18,7 +18,11 @@ function createClientIDDocument(app: AppInfo, options: Options): ClientIDDocumen
18
18
  }
19
19
 
20
20
  const baseUrl = app.baseUrl.endsWith('/') ? app.baseUrl : `${app.baseUrl}/`;
21
- const logoPublicPath = options.icons && (options.icons['512x512'] ?? Object.values(options.icons).pop());
21
+ const logoPublicPath =
22
+ options.icons &&
23
+ (Array.isArray(options.icons)
24
+ ? options.icons[0]?.src
25
+ : (options.icons['512x512'] ?? Object.values(options.icons).pop()));
22
26
  const clientID: ClientIDDocument = {
23
27
  '@context': 'https://www.w3.org/ns/solid/oidc-context.jsonld',
24
28
  'client_id': `${baseUrl}clientid.jsonld`,