eddev 2.2.0-beta.3 → 2.2.1

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,6 +1,6 @@
1
1
  import { ComponentProps, FormEvent, ReactNode } from "react";
2
2
  import { GFLayoutType, GravityFormsFieldState, GravityFormState, UseGravityFormResult } from "./useGravityForm";
3
- import { GFFieldTypeSpec, GravityFormsField } from "./types";
3
+ import { GFFieldProps, GFFieldTypeSpec, GravityFormsField } from "./types";
4
4
  import { GF_BUILTIN_FIELDS } from "./field-types";
5
5
  declare const FORM_COMPONENTS: {
6
6
  Form(props: {
@@ -78,9 +78,7 @@ declare const FORM_COMPONENTS: {
78
78
  };
79
79
  export type FormComponents = typeof FORM_COMPONENTS;
80
80
  export type FieldComponents = {
81
- [K in keyof typeof GF_BUILTIN_FIELDS]?: (typeof GF_BUILTIN_FIELDS)[K] extends GFFieldTypeSpec<infer TValue, infer TOptions> ? (props: GravityFormsFieldState<TValue, TOptions> & {
82
- formComponents: typeof FORM_COMPONENTS;
83
- }) => ReactNode : never;
81
+ [K in keyof typeof GF_BUILTIN_FIELDS]?: (typeof GF_BUILTIN_FIELDS)[K] extends GFFieldTypeSpec<infer TValue, infer TOptions> ? (props: GFFieldProps<TValue, TOptions>) => ReactNode : never;
84
82
  };
85
83
  export type GravityFormsComponent = (props: {
86
84
  state: UseGravityFormResult;
@@ -1 +1 @@
1
- {"version":3,"file":"createGravityFormComponent.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/createGravityFormComponent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createGravityFormComponent.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/createGravityFormComponent.tsx"],"names":[],"mappings":"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"}
@@ -127,7 +127,11 @@ export declare const GF_BUILTIN_FIELDS: {
127
127
  fileupload: GFFieldTypeSpec<File | FileList | File[], GFFileUploadOptions>;
128
128
  multiselect: GFFieldTypeSpec<string[], {}>;
129
129
  consent: GFFieldTypeSpec<boolean, GFConsentOptions>;
130
- captcha: GFFieldTypeSpec<string, {}>;
130
+ captcha: GFFieldTypeSpec<string, {
131
+ captchaSiteKey: string;
132
+ captchaType: string;
133
+ captchaTheme: "dark" | "light";
134
+ }>;
131
135
  html: GFFieldTypeSpec<void, {}>;
132
136
  section: GFFieldTypeSpec<void, {}>;
133
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/field-types.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/field-types.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useId } from "react";
2
+ import { useEffect, useId, useRef } from "react";
3
3
  // export type GFFieldTypes = {
4
4
  // text: string
5
5
  // textarea: string
@@ -421,12 +421,31 @@ export const GF_BUILTIN_FIELDS = {
421
421
  }),
422
422
  captcha: defineType({
423
423
  getInitialValue: () => undefined,
424
- getOptions() {
425
- return {};
424
+ getOptions(field) {
425
+ return {
426
+ captchaSiteKey: field.captchaSiteKey || "",
427
+ captchaType: field.captchaType || "",
428
+ captchaTheme: field.captchaTheme || "light",
429
+ };
426
430
  },
427
431
  appendData(data, field, value, key) {
428
432
  data.append("g-recaptcha-response", value);
429
433
  },
434
+ defaultComponent(props) {
435
+ const ref = useRef(null);
436
+ useEffect(() => {
437
+ loadRecaptcha().then((recaptcha) => {
438
+ recaptcha.render(ref.current, {
439
+ sitekey: props.captchaSiteKey,
440
+ theme: props.captchaTheme,
441
+ callback: (token) => {
442
+ props.set(token);
443
+ },
444
+ });
445
+ });
446
+ }, []);
447
+ return (_jsx(props.Wrapper, { children: _jsx("div", { ref: ref }) }));
448
+ },
430
449
  }),
431
450
  html: defineType({
432
451
  getInitialValue: () => undefined,
@@ -444,6 +463,27 @@ export const GF_BUILTIN_FIELDS = {
444
463
  },
445
464
  }),
446
465
  };
466
+ let recaptchaPromise = null;
467
+ async function loadRecaptcha() {
468
+ if (!recaptchaPromise) {
469
+ recaptchaPromise = new Promise((resolve) => {
470
+ const script = document.createElement("script");
471
+ script.id = "recaptcha-script";
472
+ script.src = "https://www.google.com/recaptcha/api.js?render=explicit";
473
+ script.async = true;
474
+ script.defer = true;
475
+ script.onload = () => {
476
+ // @ts-ignore
477
+ window.grecaptcha.ready(() => {
478
+ // @ts-ignore
479
+ resolve(window.grecaptcha);
480
+ });
481
+ };
482
+ document.body.appendChild(script);
483
+ });
484
+ }
485
+ return recaptchaPromise;
486
+ }
447
487
  export function getBuiltinType(type) {
448
488
  return GF_BUILTIN_FIELDS[type];
449
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useGravityForm.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/useGravityForm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE/E,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,eAAe,CAAA;IACrB,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;CACF,CAAA;AAsBD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAEpE,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG;IAC7E,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAA;CAChC,GAAG,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,sBAAsB,EAAE,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,sBAAsB,EAAE,CAAA;CACjC,GACD;IACE,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAEL,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB,GACD;IACE,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA4HL,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO;;;gBAhLhC,MAAM;;;;;;oBAsSE,MAAM;;YAWZ,YAAY;;oBAQN,MAAM,SAAS,GAAG;gBAhUxB,OAAO;cACT,OAAO;oBACD,MAAM,GAAG,IAAI;eAClB,MAAM,GAAG,IAAI;eACb,OAAO;UACZ,MAAM;WACL;QACL,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,EAAE;YACK;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;YACtB;QACN,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAClC;cACS;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB;EAqTF;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"useGravityForm.d.ts","sourceRoot":"","sources":["../../../../../src/app/lib/integrations/gravityforms/useGravityForm.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE/E,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,eAAe,CAAA;IACrB,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAA;CACF,CAAA;AAsBD,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;AAEpE,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG;IAC7E,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAA;CAChC,GAAG,MAAM,CAAA;AAEV,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,sBAAsB,EAAE,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,sBAAsB,EAAE,CAAA;CACjC,GACD;IACE,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAEL,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB,GACD;IACE,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA4HL,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO;;;gBAhLhC,MAAM;;;;;;oBAoSE,MAAM;;YAWZ,YAAY;;oBAQN,MAAM,SAAS,GAAG;gBA9TxB,OAAO;cACT,OAAO;oBACD,MAAM,GAAG,IAAI;eAClB,MAAM,GAAG,IAAI;eACb,OAAO;UACZ,MAAM;WACL;QACL,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,EAAE;YACK;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;YACtB;QACN,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAClC;cACS;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB;EAmTF;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"}
@@ -189,7 +189,6 @@ export function useGravityForm(opts) {
189
189
  dispatch({ type: "goToPage", number: firstErrorPage });
190
190
  }
191
191
  }, [JSON.stringify(state.errors)]);
192
- console.log("State is", state);
193
192
  return {
194
193
  ...state,
195
194
  submitLabel: state.page < state.pages.length - 1 ? "Next" : state.submitLabel || "Submit",
@@ -1 +1 @@
1
- {"version":3,"file":"replace-host.d.ts","sourceRoot":"","sources":["../../../../src/app/server/utils/replace-host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,0FAA0F;IAC1F,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACjD,CAAA;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,IAI7C,MAAM,MAAM,EAAE,YAAY,MAAM,YAiEzC"}
1
+ {"version":3,"file":"replace-host.d.ts","sourceRoot":"","sources":["../../../../src/app/server/utils/replace-host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,0FAA0F;IAC1F,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CACjD,CAAA;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,IAI7C,MAAM,MAAM,EAAE,YAAY,MAAM,YAgCzC"}
@@ -31,39 +31,6 @@ export function createUrlReplacer(conf) {
31
31
  }
32
32
  }
33
33
  return path;
34
- // if (path.startsWith("/wp-content/uploads/")) {
35
- // if (!conf.ignoreUploads) {
36
- // return path
37
- // } else {
38
- // return url
39
- // }
40
- // // } else if (path.startsWith("/wp-content/themes/")) {
41
- // // if (settings?.uploads === "proxy") {
42
- // // return path
43
- // // } else if (settings?.uploads === "remote") {
44
- // // return url
45
- // // }
46
- // // } else if (path.startsWith("/wp-content/plugins/")) {
47
- // // if (settings?.uploads === "proxy") {
48
- // // return path
49
- // // } else if (settings?.uploads === "remote") {
50
- // // return url
51
- // // }
52
- // } else {
53
- // return path
54
- // }
55
34
  });
56
35
  };
57
- // const from = conf.from
58
- // const to = conf.to
59
- // const https = conf.https
60
- // const ignoreUploads = conf.ignoreUploads
61
- // const ignorePlugins = conf.ignorePlugins
62
- // const replaceTargetString = from.replaceAll(/https?:/g, "https?:").replaceAll("/", "\\/")
63
- // const replaceTargetEscapedString = from.replaceAll(/https?:/g, "https?:").replaceAll("/", "\\\\/")
64
- // const replaceTarget = new RegExp(replaceTargetString, "g")
65
- // const replaceTargetEscaped = new RegExp(replaceTargetEscapedString, "g")
66
- // return (value: string) => {
67
- // return value.replaceAll(replaceTarget, to).replace(replaceTargetEscaped, to.replaceAll("/", "\\/"))
68
- // }
69
36
  }
@@ -31,6 +31,13 @@ const program = new Command()
31
31
  const init = (verbose) => {
32
32
  console.log(`\n<⚡️ ED. Stack v${VERSION}>\n`);
33
33
  };
34
+ program.command("create-favicons").action(async () => {
35
+ const project = await Project.create({
36
+ rootDir: process.cwd(),
37
+ });
38
+ const { buildFavicons } = await import("../project/favicons.js");
39
+ await buildFavicons(project.rootDir, project.config?.favicon);
40
+ });
34
41
  program
35
42
  .command("dev")
36
43
  .description("Run in dev mode")
@@ -94,6 +101,14 @@ program
94
101
  rootDir: process.cwd(),
95
102
  reportPluginCompatibility: true,
96
103
  });
104
+ async function buildFavicons() {
105
+ try {
106
+ const { buildFavicons } = await import("../project/favicons.js");
107
+ await buildFavicons(project.rootDir, project.config?.favicon);
108
+ }
109
+ catch (e) { }
110
+ }
111
+ buildFavicons();
97
112
  // const result = await project.verifyOriginAccess()
98
113
  // if (!result.success) {
99
114
  // projectLog.fail(result.message)
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.2.0-beta.3";
1
+ export declare const VERSION = "2.2.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/node/cli/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,iBAAiB,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/node/cli/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA"}
@@ -1 +1 @@
1
- export const VERSION = "2.2.0-beta.3";
1
+ export const VERSION = "2.2.1";
@@ -1,32 +1,58 @@
1
1
  import { z } from "zod";
2
2
  import { Project } from "./project.js";
3
3
  export declare const EDCacheConfigSchema: z.ZodObject<{
4
- wordpress: z.ZodDefault<z.ZodOptional<z.ZodObject<{
5
- strategy: z.ZodOptional<z.ZodEnum<{
4
+ wordpress: z.ZodDefault<z.ZodObject<{
5
+ strategy: z.ZodEnum<{
6
6
  always: "always";
7
7
  "ssr-always-fresh": "ssr-always-fresh";
8
- }>>;
8
+ }>;
9
9
  cacheHeaders: z.ZodDefault<z.ZodBoolean>;
10
10
  transients: z.ZodDefault<z.ZodBoolean>;
11
- }, z.core.$strip>>>;
12
- serverless: z.ZodDefault<z.ZodOptional<z.ZodObject<{
13
- isr: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
+ }, z.core.$strip>>;
12
+ serverless: z.ZodDefault<z.ZodObject<{
13
+ isr: z.ZodDefault<z.ZodBoolean>;
14
14
  dataCache: z.ZodDefault<z.ZodEnum<{
15
15
  none: "none";
16
16
  "in-memory": "in-memory";
17
17
  kv: "kv";
18
18
  }>>;
19
- }, z.core.$strip>>>;
19
+ }, z.core.$strip>>;
20
20
  pageDataTTL: z.ZodDefault<z.ZodNumber>;
21
21
  appDataTTL: z.ZodDefault<z.ZodNumber>;
22
22
  queryHooksTTL: z.ZodDefault<z.ZodNumber>;
23
23
  }, z.core.$strip>;
24
+ export declare const EDFaviconConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
25
+ mode: z.ZodLiteral<"auto">;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ mode: z.ZodLiteral<"svg">;
28
+ default: z.ZodDefault<z.ZodString>;
29
+ light: z.ZodDefault<z.ZodString>;
30
+ dark: z.ZodDefault<z.ZodString>;
31
+ }, z.core.$strip>, z.ZodObject<{
32
+ mode: z.ZodLiteral<"pngs">;
33
+ default: z.ZodDefault<z.ZodString>;
34
+ light: z.ZodDefault<z.ZodString>;
35
+ dark: z.ZodDefault<z.ZodString>;
36
+ }, z.core.$strip>], "mode">;
24
37
  export declare const EDConfigSchema: z.ZodObject<{
25
38
  $schema: z.ZodOptional<z.ZodString>;
26
39
  version: z.ZodEnum<{
27
40
  1: "1";
28
41
  2: "2";
29
42
  }>;
43
+ favicon: z.ZodOptional<z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
44
+ mode: z.ZodLiteral<"auto">;
45
+ }, z.core.$strip>, z.ZodObject<{
46
+ mode: z.ZodLiteral<"svg">;
47
+ default: z.ZodDefault<z.ZodString>;
48
+ light: z.ZodDefault<z.ZodString>;
49
+ dark: z.ZodDefault<z.ZodString>;
50
+ }, z.core.$strip>, z.ZodObject<{
51
+ mode: z.ZodLiteral<"pngs">;
52
+ default: z.ZodDefault<z.ZodString>;
53
+ light: z.ZodDefault<z.ZodString>;
54
+ dark: z.ZodDefault<z.ZodString>;
55
+ }, z.core.$strip>], "mode">>>;
30
56
  legacyMetadata: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
31
57
  legacyStitches: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
32
58
  trackers: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -67,22 +93,22 @@ export declare const EDConfigSchema: z.ZodObject<{
67
93
  }, z.core.$strip>>;
68
94
  }, z.core.$strip>;
69
95
  cache: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
70
- wordpress: z.ZodDefault<z.ZodOptional<z.ZodObject<{
71
- strategy: z.ZodOptional<z.ZodEnum<{
96
+ wordpress: z.ZodDefault<z.ZodObject<{
97
+ strategy: z.ZodEnum<{
72
98
  always: "always";
73
99
  "ssr-always-fresh": "ssr-always-fresh";
74
- }>>;
100
+ }>;
75
101
  cacheHeaders: z.ZodDefault<z.ZodBoolean>;
76
102
  transients: z.ZodDefault<z.ZodBoolean>;
77
- }, z.core.$strip>>>;
78
- serverless: z.ZodDefault<z.ZodOptional<z.ZodObject<{
79
- isr: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
103
+ }, z.core.$strip>>;
104
+ serverless: z.ZodDefault<z.ZodObject<{
105
+ isr: z.ZodDefault<z.ZodBoolean>;
80
106
  dataCache: z.ZodDefault<z.ZodEnum<{
81
107
  none: "none";
82
108
  "in-memory": "in-memory";
83
109
  kv: "kv";
84
110
  }>>;
85
- }, z.core.$strip>>>;
111
+ }, z.core.$strip>>;
86
112
  pageDataTTL: z.ZodDefault<z.ZodNumber>;
87
113
  appDataTTL: z.ZodDefault<z.ZodNumber>;
88
114
  queryHooksTTL: z.ZodDefault<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/node/project/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,OAAO,EAAyB,MAAM,cAAc,CAAA;AAE7D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iBA8B9B,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuHzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AACrD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,qBAAa,YAAY;IAGI,OAAO,EAAE,OAAO;IAF3C,MAAM,CAAC,EAAE,QAAQ,CAAA;IAEjB,OAAO;WAEM,MAAM,CAAC,OAAO,EAAE,OAAO;IAM9B,IAAI;YAQI,kBAAkB;YAYlB,UAAU;IAiCxB,OAAO,CAAC,WAAW;IAOnB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;CAUzD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/node/project/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,OAAO,EAAyB,MAAM,cAAc,CAAA;AAE7D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;iBAqB9B,CAAA;AAqBF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;2BAwChC,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwHzB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AACrD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,qBAAa,YAAY;IAGI,OAAO,EAAE,OAAO;IAF3C,MAAM,CAAC,EAAE,QAAQ,CAAA;IAEjB,OAAO;WAEM,MAAM,CAAC,OAAO,EAAE,OAAO;IAM9B,IAAI;YAQI,kBAAkB;YAclB,UAAU;IAiCxB,OAAO,CAAC,WAAW;IAOnB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;CAUzD"}
@@ -9,36 +9,81 @@ export const EDCacheConfigSchema = z.object({
9
9
  wordpress: z
10
10
  .object({
11
11
  /** @deprecated */
12
- strategy: z
13
- .enum(["always", "ssr-always-fresh"])
14
- .optional()
15
- .describe("Deprecated. Use cacheHeaders/transients instead."),
12
+ strategy: z.enum(["always", "ssr-always-fresh"]).describe("Deprecated. Use cacheHeaders/transients instead."),
16
13
  cacheHeaders: z.boolean().default(true).describe("Whether to add caching headers to data requests."),
17
14
  transients: z.boolean().default(true).describe("Whether to cache within transients."),
18
15
  })
19
- .optional()
20
16
  .default({ strategy: "always", cacheHeaders: true, transients: true }),
21
17
  serverless: z
22
18
  .object({
23
- isr: z
24
- .boolean()
25
- .optional()
26
- .default(true)
27
- .describe("Whether to use Incremental Static Regeneration for this origin."),
19
+ isr: z.boolean().default(true).describe("Whether to use Incremental Static Regeneration for this origin."),
28
20
  dataCache: z
29
21
  .enum(["in-memory", "kv", "none"])
30
22
  .default("in-memory")
31
23
  .describe("The cache strategy to use for page data."),
32
24
  })
33
- .optional()
34
25
  .default({ isr: true, dataCache: "in-memory" }),
35
26
  pageDataTTL: z.number().default(300).describe("The number of seconds to cache page data."),
36
27
  appDataTTL: z.number().default(300).describe("The number of seconds to cache global app data."),
37
28
  queryHooksTTL: z.number().default(300).describe("The number of seconds to cache named GraphQL queries."),
38
29
  });
30
+ const faviconMods = `
31
+ The favicon generation mode.
32
+
33
+ "svg" — Use a single SVG file as the source for generating favicons.
34
+ - The default will be \`/assets/favicon.svg\`
35
+ - The .svg will be served via a link tag for modern browsers.
36
+ - You can optionally specify light and dark mode variants.
37
+ - A raster .ico file will be generated from the SVG for maximum compatibility. If light and dark variants are provided, the .ico will prefer either the 'file' or 'light' variant.
38
+
39
+ "pngs" — Use multiple PNG files as the source for generating favicons.
40
+ - The PNG files will be collected from the glob pattern, default "/assets/favicon/favicon-*.png".
41
+ - The PNG files will be served via link tags for maximum compatibility.
42
+ - A raster .ico file will be generated from the PNGs for maximum compatibility.
43
+
44
+ "auto" — Disable .ico generation, and use WordPress' built-in favicon handling via the Site Icon feature.
45
+ - You must provide your own favicons via the WordPress admin.
46
+ - No favicons will be generated during the build process.
47
+ `.trim();
48
+ export const EDFaviconConfigSchema = z.discriminatedUnion("mode", [
49
+ z.object({
50
+ mode: z.literal("auto").describe(faviconMods),
51
+ }),
52
+ z.object({
53
+ mode: z.literal("svg").describe(faviconMods),
54
+ default: z
55
+ .string()
56
+ .describe("The SVG file to use as a favicon. Defaults to '/assets/favicon.svg'")
57
+ .default("/assets/favicon.svg"),
58
+ light: z
59
+ .string()
60
+ .describe("The SVG file to use as a light-mode favicon, where supported. Defaults to '/assets/favicon-light.svg'")
61
+ .default("/assets/favicon-light.svg"),
62
+ dark: z
63
+ .string()
64
+ .describe("The SVG file to use as a dark-mode favicon, where supported. Defaults to '/assets/favicon-dark.svg'")
65
+ .default("/assets/favicon-dark.svg"),
66
+ }),
67
+ z.object({
68
+ mode: z.literal("pngs").describe(faviconMods),
69
+ default: z
70
+ .string()
71
+ .describe("The glob pattern to use to find PNG files for favicon generation. Defaults to '/assets/favicon/favicon-*.png'")
72
+ .default("/assets/favicon/favicon-*.png"),
73
+ light: z
74
+ .string()
75
+ .describe("The SVG file to use as a light-mode favicon, where supported. Defaults to '/assets/favicon/favicon-*-light.png'")
76
+ .default("/assets/favicon/favicon-*-light.png"),
77
+ dark: z
78
+ .string()
79
+ .describe("The SVG file to use as a dark-mode favicon, where supported. Defaults to '/assets/favicon/favicon-*-dark.png'")
80
+ .default("/assets/favicon/favicon-*-dark.png"),
81
+ }),
82
+ ]);
39
83
  export const EDConfigSchema = z.object({
40
84
  $schema: z.string().optional(),
41
85
  version: z.enum(["1", "2"]).refine((v) => v === "2", { message: "Only version 2 is supported" }),
86
+ favicon: EDFaviconConfigSchema.describe("Favicon handling configuration").default({ mode: "auto" }).optional(),
42
87
  legacyMetadata: z
43
88
  .boolean()
44
89
  .optional()
@@ -159,7 +204,9 @@ export class Configurator {
159
204
  return;
160
205
  console.verbose("Ensuring config schema exists...");
161
206
  const schemaPath = path.resolve(this.project.rootDir, ".ed.config.schema.json");
162
- const didChange = await fs.writeJsonIfUnchanged(schemaPath, z.toJSONSchema(EDConfigSchema)).catch((err) => {
207
+ const didChange = await fs
208
+ .writeJsonIfUnchanged(schemaPath, z.toJSONSchema(EDConfigSchema, { io: "input" }))
209
+ .catch((err) => {
163
210
  console.error("Failed to write config schema file:\n", err);
164
211
  });
165
212
  if (didChange) {
@@ -1 +1,6 @@
1
+ import z from "zod";
2
+ import { EDFaviconConfigSchema } from "./config";
3
+ type Config = z.infer<typeof EDFaviconConfigSchema>;
4
+ export declare function buildFavicons(rootDir: string, config: Config): Promise<void>;
5
+ export {};
1
6
  //# sourceMappingURL=favicons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"favicons.d.ts","sourceRoot":"","sources":["../../../src/node/project/favicons.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"favicons.d.ts","sourceRoot":"","sources":["../../../src/node/project/favicons.ts"],"names":[],"mappings":"AAKA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAUhD,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnD,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAiElE"}
@@ -1 +1,133 @@
1
- "use strict";
1
+ import ico from "sharp-ico";
2
+ import sharp from "sharp";
3
+ import * as fs from "fs/promises";
4
+ import { globby } from "globby";
5
+ import { join } from "path";
6
+ export async function buildFavicons(rootDir, config) {
7
+ // Clear the favicon directory
8
+ await fs.rm(join(rootDir, "assets/favicon-out/"), { recursive: true }).catch(() => { });
9
+ await fs.mkdir(join(rootDir, "assets/favicon-out/"), { recursive: true });
10
+ // If 'auto' mode is used, do nothing
11
+ if (config.mode === "auto")
12
+ return;
13
+ await fs.rm(join(rootDir, "favicon.ico")).catch(() => { });
14
+ if (config.mode === "svg") {
15
+ let svgFavicon = "";
16
+ const defaultFavicon = config.default
17
+ ? await fs.readFile(join(rootDir, config.default), "utf-8").catch(() => null)
18
+ : null;
19
+ const lightFavicon = config.light ? await fs.readFile(join(rootDir, config.light), "utf-8").catch(() => null) : null;
20
+ const darkFavicon = config.dark ? await fs.readFile(join(rootDir, config.dark), "utf-8").catch(() => null) : null;
21
+ if (lightFavicon && darkFavicon) {
22
+ svgFavicon = mergeSVGIcons(lightFavicon, darkFavicon);
23
+ }
24
+ else if (defaultFavicon) {
25
+ svgFavicon = defaultFavicon;
26
+ }
27
+ else if (lightFavicon) {
28
+ svgFavicon = lightFavicon;
29
+ }
30
+ else if (darkFavicon) {
31
+ svgFavicon = darkFavicon;
32
+ }
33
+ if (svgFavicon) {
34
+ await fs.writeFile(join(rootDir, "assets/favicon-out/", "favicon.svg"), svgFavicon, "utf-8");
35
+ }
36
+ // Create SVG favicons
37
+ }
38
+ // Create .ico file if configured
39
+ {
40
+ const icoPatterns = [config.default, config.light, config.dark];
41
+ let icoSources = [];
42
+ for (const pattern of icoPatterns) {
43
+ if (!pattern)
44
+ continue;
45
+ const files = await globby(join(rootDir, pattern));
46
+ if (files.length === 0)
47
+ continue;
48
+ if (icoSources.length === 0) {
49
+ icoSources = files;
50
+ }
51
+ else {
52
+ icoSources = icoSources.filter((f) => !files.includes(f));
53
+ }
54
+ }
55
+ if (icoSources.length === 0)
56
+ return;
57
+ let validSources = icoSources.map((file) => sharp(file));
58
+ if (validSources.length > 0) {
59
+ // If any source is larger than 256x256, resize it
60
+ validSources = await Promise.all(validSources.map(async (source) => {
61
+ const metadata = await source.metadata();
62
+ if ((metadata.width && metadata.width > 256) || (metadata.height && metadata.height > 256)) {
63
+ return source.resize(256, 256, { fit: "inside" });
64
+ }
65
+ return source;
66
+ }));
67
+ await ico.sharpsToIco(validSources, join(rootDir, "assets/favicon-out//favicon.ico"));
68
+ }
69
+ }
70
+ }
71
+ function mergeSVGIcons(light, dark) {
72
+ const lightSvg = parseSvg(light);
73
+ const darkSvg = parseSvg(dark);
74
+ // Prefer light's attributes, fall back to dark's
75
+ const width = lightSvg.width ?? darkSvg.width;
76
+ const height = lightSvg.height ?? darkSvg.height;
77
+ const viewBox = lightSvg.viewBox ?? darkSvg.viewBox;
78
+ let sizeAttrs = "";
79
+ if (width)
80
+ sizeAttrs += ` width="${width}"`;
81
+ if (height)
82
+ sizeAttrs += ` height="${height}"`;
83
+ if (viewBox)
84
+ sizeAttrs += ` viewBox="${viewBox}"`;
85
+ return [
86
+ `<svg xmlns="http://www.w3.org/2000/svg"${sizeAttrs}>`,
87
+ ` <style>`,
88
+ ` .icon-dark { display: none; }`,
89
+ ` @media (prefers-color-scheme: dark) {`,
90
+ ` .icon-light { display: none; }`,
91
+ ` .icon-dark { display: inline; }`,
92
+ ` }`,
93
+ ` </style>`,
94
+ ` <g class="icon-light">`,
95
+ indentInner(lightSvg.inner),
96
+ ` </g>`,
97
+ ` <g class="icon-dark">`,
98
+ indentInner(darkSvg.inner),
99
+ ` </g>`,
100
+ `</svg>`,
101
+ ].join("\n");
102
+ }
103
+ function parseSvg(svg) {
104
+ const openTagMatch = svg.match(/<svg\b([^>]*)>/i);
105
+ const endIndex = svg.lastIndexOf("</svg>");
106
+ let attrs = "";
107
+ let inner = svg.trim();
108
+ if (openTagMatch && openTagMatch.index !== undefined && endIndex !== -1) {
109
+ attrs = openTagMatch[1] ?? "";
110
+ const contentStart = openTagMatch.index + openTagMatch[0].length;
111
+ inner = svg.slice(contentStart, endIndex).trim();
112
+ }
113
+ const width = matchAttr(attrs, "width");
114
+ const height = matchAttr(attrs, "height");
115
+ const viewBox = matchAttr(attrs, "viewBox");
116
+ // If no width/height but we have a viewBox, we *could* derive them from it,
117
+ // but the caller only asked to "determine size" — using viewBox is enough.
118
+ return { width, height, viewBox, inner };
119
+ }
120
+ function matchAttr(attrs, name) {
121
+ // width="24", width='24', width=24, viewBox="0 0 24 24", etc.
122
+ const re = new RegExp(`\\b${name}\\s*=\\s*(?:"([^"]*)"|'([^']*)'|([^\\s"'>]+))`, "i");
123
+ const m = attrs.match(re);
124
+ if (!m)
125
+ return undefined;
126
+ return m[1] ?? m[2] ?? m[3];
127
+ }
128
+ function indentInner(inner, indent = " ") {
129
+ return inner
130
+ .split("\n")
131
+ .map((line) => (line.trim() ? indent + line : line))
132
+ .join("\n");
133
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eddev",
3
- "version": "2.2.0-beta.3",
3
+ "version": "2.2.1",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -123,6 +123,7 @@
123
123
  "react-compiler-runtime": "^1.0.0",
124
124
  "react-inspector": "^9.0.0",
125
125
  "rollup-plugin-visualizer": "^5.14.0",
126
+ "sharp-ico": "^0.1.5",
126
127
  "superjson": "^2.2.2",
127
128
  "ts-poet": "^6.6.0",
128
129
  "ufo": "^1.3.1",