@fedify/init 2.3.0-pr.809.39 → 2.3.0

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.
Files changed (51) hide show
  1. package/dist/action/cleanup.js +46 -0
  2. package/dist/action/configs.js +51 -6
  3. package/dist/action/deps.js +1 -1
  4. package/dist/action/mod.js +2 -1
  5. package/dist/action/patch.js +27 -16
  6. package/dist/action/templates.js +3 -2
  7. package/dist/deno.js +1 -1
  8. package/dist/json/deps.js +15 -13
  9. package/dist/json/deps.json +17 -15
  10. package/dist/json/kv.js +3 -3
  11. package/dist/json/kv.json +3 -3
  12. package/dist/json/mq.js +3 -3
  13. package/dist/json/mq.json +3 -3
  14. package/dist/json/oxfmt.js +16 -0
  15. package/dist/json/oxfmt.json +13 -0
  16. package/dist/json/oxlint.js +38 -0
  17. package/dist/json/oxlint.json +37 -0
  18. package/dist/json/vscode-settings.js +11 -10
  19. package/dist/json/vscode-settings.json +11 -10
  20. package/dist/templates/bare-bones/main/bun.ts.tpl +3 -3
  21. package/dist/templates/bare-bones/main/node.ts.tpl +7 -8
  22. package/dist/templates/defaults/federation.oxc.ts.tpl +22 -0
  23. package/dist/templates/defaults/federation.ts.tpl +1 -0
  24. package/dist/templates/elysia/index/bun.ts.tpl +1 -1
  25. package/dist/templates/elysia/index/node.ts.tpl +2 -2
  26. package/dist/templates/express/app.ts.tpl +0 -3
  27. package/dist/templates/hono/app.tsx.tpl +0 -3
  28. package/dist/templates/hono/index/node.ts.tpl +1 -2
  29. package/dist/templates/next/middleware.ts.tpl +3 -3
  30. package/dist/templates/nitro/nitro.config.ts.tpl +2 -2
  31. package/dist/templates/nitro/server/error.ts.tpl +1 -1
  32. package/dist/templates/nitro/server/middleware/federation.ts.tpl +2 -6
  33. package/dist/templates/nitro/server/routes/index.ts.tpl +11 -0
  34. package/dist/test/create.js +30 -1
  35. package/dist/types.d.ts +13 -0
  36. package/dist/utils.js +14 -7
  37. package/dist/webframeworks/astro.js +18 -7
  38. package/dist/webframeworks/bare-bones.js +4 -7
  39. package/dist/webframeworks/const.js +3 -3
  40. package/dist/webframeworks/elysia.js +4 -7
  41. package/dist/webframeworks/express.js +4 -5
  42. package/dist/webframeworks/hono.js +4 -5
  43. package/dist/webframeworks/next.js +9 -4
  44. package/dist/webframeworks/nitro.js +30 -3
  45. package/dist/webframeworks/nuxt.js +4 -4
  46. package/dist/webframeworks/solidstart.js +5 -5
  47. package/dist/webframeworks/utils.js +7 -1
  48. package/package.json +6 -5
  49. package/dist/json/biome.js +0 -16
  50. package/dist/json/biome.json +0 -19
  51. package/dist/templates/defaults/eslint.config.ts.tpl +0 -3
@@ -0,0 +1,46 @@
1
+ import { formatJson } from "../utils.js";
2
+ import { throwUnlessNotExists } from "../lib.js";
3
+ import { readFile, rm, writeFile } from "node:fs/promises";
4
+ import { isAbsolute, join, relative, resolve } from "node:path";
5
+ //#region src/action/cleanup.ts
6
+ async function cleanupScaffoldedFiles({ dir, initializer }) {
7
+ await Promise.all((initializer.cleanupFiles ?? []).filter((path) => path.trim() !== "").map((path) => rm(resolveCleanupPath(dir, path), {
8
+ force: true,
9
+ recursive: true
10
+ })));
11
+ await cleanupPackageJson(dir, initializer.cleanupPackageJson);
12
+ }
13
+ function resolveCleanupPath(dir, path) {
14
+ const baseDir = resolve(dir);
15
+ const targetPath = resolve(baseDir, path);
16
+ const relative$1 = relative(baseDir, targetPath);
17
+ if (relative$1 === "" || relative$1.startsWith("..") || isAbsolute(relative$1)) throw new Error(`Cleanup path escapes project directory: ${path}`);
18
+ return targetPath;
19
+ }
20
+ async function cleanupPackageJson(dir, cleanup) {
21
+ if (cleanup == null || isEmptyPackageJsonCleanup(cleanup)) return;
22
+ const path = join(dir, "package.json");
23
+ const packageJson = await readPackageJson(path);
24
+ if (packageJson == null) return;
25
+ deleteKeys(packageJson.scripts, cleanup.scripts);
26
+ deleteKeys(packageJson.dependencies, cleanup.dependencies);
27
+ deleteKeys(packageJson.devDependencies, cleanup.devDependencies);
28
+ await writeFile(path, formatJson(packageJson));
29
+ }
30
+ function isEmptyPackageJsonCleanup(cleanup) {
31
+ return (cleanup.scripts?.length ?? 0) === 0 && (cleanup.dependencies?.length ?? 0) === 0 && (cleanup.devDependencies?.length ?? 0) === 0;
32
+ }
33
+ async function readPackageJson(path) {
34
+ try {
35
+ return JSON.parse(await readFile(path, "utf8"));
36
+ } catch (error) {
37
+ throwUnlessNotExists(error);
38
+ return null;
39
+ }
40
+ }
41
+ function deleteKeys(target, keys) {
42
+ if (target == null || typeof target !== "object" || keys == null) return;
43
+ for (const key of keys) Reflect.deleteProperty(target, key);
44
+ }
45
+ //#endregion
46
+ export { cleanupScaffoldedFiles };
@@ -1,5 +1,6 @@
1
1
  import { merge } from "../utils.js";
2
- import biome_default from "../json/biome.js";
2
+ import oxfmt_default from "../json/oxfmt.js";
3
+ import oxlint_default from "../json/oxlint.js";
3
4
  import vscode_settings_for_deno_default from "../json/vscode-settings-for-deno.js";
4
5
  import vscode_settings_default from "../json/vscode-settings.js";
5
6
  import { getPackagesPath } from "./const.js";
@@ -93,19 +94,63 @@ const loadPackageJson = (data) => ({
93
94
  devDependencies: getDevDependencies(data)
94
95
  }
95
96
  });
97
+ const loadOxfmtConfig = (data) => ({
98
+ path: join(".oxfmtrc.json"),
99
+ data: withFormatIgnorePatterns(oxfmt_default, data)
100
+ });
101
+ const loadOxlintConfig = (data) => ({
102
+ path: join(".oxlintrc.json"),
103
+ data: withFormatIgnorePatterns(oxlint_default, data)
104
+ });
105
+ const loadVscodeSettings = (data) => ({
106
+ path: devToolConfigs.vscSet.path,
107
+ data: data.initializer.format?.tool === "prettier" ? getVscodeSettingsForPrettier() : vscode_settings_default
108
+ });
109
+ const loadVscodeExtensions = (data) => ({
110
+ path: devToolConfigs.vscExt.path,
111
+ data: data.initializer.format?.tool === "prettier" ? { recommendations: [
112
+ "astro-build.astro-vscode",
113
+ "esbenp.prettier-vscode",
114
+ "oxc.oxc-vscode"
115
+ ] } : devToolConfigs.vscExt.data
116
+ });
117
+ const withFormatIgnorePatterns = (config, data) => ({
118
+ ...config,
119
+ ignorePatterns: [...new Set([...config.ignorePatterns ?? [], ...data.initializer.format?.ignorePatterns ?? []])].sort()
120
+ });
121
+ function getVscodeSettingsForPrettier() {
122
+ const { "oxc.fmt.configPath": _configPath, ...settings } = vscode_settings_default;
123
+ const prettierSettings = {};
124
+ for (const [key, value] of Object.entries(settings)) if (key.startsWith("[") && typeof value === "object" && value != null) prettierSettings[key] = {
125
+ ...value,
126
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
127
+ };
128
+ else prettierSettings[key] = value;
129
+ return {
130
+ ...prettierSettings,
131
+ "[astro]": {
132
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
133
+ "editor.formatOnSave": true
134
+ }
135
+ };
136
+ }
96
137
  /**
97
138
  * Configuration objects for various development tool setup files.
98
139
  * Contains predefined configurations for code formatting, VS Code settings, and extensions
99
140
  * based on the project type (Node.js/Bun or Deno).
100
141
  */
101
142
  const devToolConfigs = {
102
- biome: {
103
- path: join("biome.json"),
104
- data: biome_default
143
+ oxfmt: {
144
+ path: join(".oxfmtrc.json"),
145
+ data: oxfmt_default
146
+ },
147
+ oxlint: {
148
+ path: join(".oxlintrc.json"),
149
+ data: oxlint_default
105
150
  },
106
151
  vscExt: {
107
152
  path: join(".vscode", "extensions.json"),
108
- data: { recommendations: ["biomejs.biome", "dbaeumer.vscode-eslint"] }
153
+ data: { recommendations: ["oxc.oxc-vscode"] }
109
154
  },
110
155
  vscSet: {
111
156
  path: join(".vscode", "settings.json"),
@@ -121,4 +166,4 @@ const devToolConfigs = {
121
166
  }
122
167
  };
123
168
  //#endregion
124
- export { devToolConfigs, loadDenoConfig, loadPackageJson, loadTsConfig };
169
+ export { devToolConfigs, loadDenoConfig, loadOxfmtConfig, loadOxlintConfig, loadPackageJson, loadTsConfig, loadVscodeExtensions, loadVscodeSettings };
@@ -28,7 +28,7 @@ const addLocalFedifyDeps = (deps) => pipe(deps, entries, map(when(([name]) => na
28
28
  const convertFedifyToLocal = (name) => pipe(name, replace("@fedify/", ""), (pkg) => join$1(getPackagesPath(), pkg));
29
29
  /** Gathers all devDependencies required for the project based on the
30
30
  * initializer, key-value store, and message queue configurations,
31
- * including Biome for linting/formatting.
31
+ * including Oxfmt and Oxlint for formatting and linting.
32
32
  *
33
33
  * @param data - Web Framework initializer, key-value store
34
34
  * and message queue descriptions
@@ -1,5 +1,6 @@
1
1
  import { set } from "../utils.js";
2
2
  import askOptions from "../ask/mod.js";
3
+ import { cleanupScaffoldedFiles } from "./cleanup.js";
3
4
  import { makeDirIfHyd } from "./dir.js";
4
5
  import { drawDinosaur, noticeHowToRun, noticeOptions, noticePrecommand, noticeSkippedInstall } from "./notice.js";
5
6
  import recommendConfigEnv from "./env.js";
@@ -30,6 +31,6 @@ import process from "node:process";
30
31
  const runInit = (options) => pipe(options, tap(drawDinosaur), setTestMode, askOptions, tap(noticeOptions), setData, when(isDry, handleDryRun), unless(isDry, handleHydRun), tap(recommendConfigEnv), tap(noticeHowToRun));
31
32
  const setTestMode = set("testMode", () => Boolean(process.env["FEDIFY_TEST_MODE"]));
32
33
  const handleDryRun = (data) => pipe(data, tap(when(hasCommand, noticePrecommand)), tap(recommendPatchFiles), tap(recommendDependencies));
33
- const handleHydRun = (data) => pipe(data, tap(makeDirIfHyd), tap(assertNoGeneratedFileConflicts), tap(when(hasCommand, runPrecommand)), tap(patchFiles), tap(unless(isSkipInstall, installDependencies)), tap(when(isSkipInstall, noticeSkippedInstall)));
34
+ const handleHydRun = (data) => pipe(data, tap(makeDirIfHyd), tap(assertNoGeneratedFileConflicts), tap(when(hasCommand, runPrecommand)), tap(cleanupScaffoldedFiles), tap(patchFiles), tap(unless(isSkipInstall, installDependencies)), tap(when(isSkipInstall, noticeSkippedInstall)));
34
35
  //#endregion
35
36
  export { runInit as default };
@@ -1,13 +1,14 @@
1
- import { formatJson, merge, replaceAll, set } from "../utils.js";
1
+ import { formatJson, merge, set } from "../utils.js";
2
2
  import { createFile, throwUnlessNotExists } from "../lib.js";
3
3
  import { displayFile, noticeFilesToCreate, noticeFilesToInsert } from "./notice.js";
4
4
  import { joinDir, stringifyEnvs } from "./utils.js";
5
- import { devToolConfigs, loadDenoConfig, loadPackageJson, loadTsConfig } from "./configs.js";
5
+ import { devToolConfigs, loadDenoConfig, loadOxfmtConfig, loadOxlintConfig, loadPackageJson, loadTsConfig, loadVscodeExtensions, loadVscodeSettings } from "./configs.js";
6
6
  import { getImports, loadFederation, loadLogging } from "./templates.js";
7
7
  import { always, apply, entries, map, pipe, pipeLazy, tap } from "@fxts/core";
8
8
  import { toMerged } from "es-toolkit";
9
9
  import { access, readFile } from "node:fs/promises";
10
10
  import { join as join$1 } from "node:path";
11
+ import { parse, printParseErrorCode } from "jsonc-parser";
11
12
  //#region src/action/patch.ts
12
13
  const jsonsCache = /* @__PURE__ */ new Map();
13
14
  const getJsonsCacheKey = (data) => JSON.stringify({
@@ -20,6 +21,7 @@ const getJsonsCacheKey = (data) => JSON.stringify({
20
21
  compilerOptions: data.initializer.compilerOptions ?? {},
21
22
  dependencies: data.initializer.dependencies ?? {},
22
23
  devDependencies: data.initializer.devDependencies ?? {},
24
+ format: data.initializer.format ?? {},
23
25
  tasks: data.initializer.tasks ?? {}
24
26
  },
25
27
  kv: {
@@ -47,8 +49,8 @@ const recommendPatchFiles = (data) => pipe(data, set("files", getFiles), set("js
47
49
  /**
48
50
  * Verifies that `--allow-non-empty` will not modify files that already
49
51
  * existed before any framework scaffolding command runs. This only covers
50
- * files that Fedify writes itself; framework scaffolders may still reject
51
- * unrelated pre-existing files independently.
52
+ * files that Fedify writes or deletes itself; framework scaffolders may still
53
+ * reject unrelated pre-existing files independently.
52
54
  */
53
55
  async function assertNoGeneratedFileConflicts(data) {
54
56
  if (!data.allowNonEmpty) return;
@@ -101,9 +103,10 @@ const getJsons = (data) => {
101
103
  } : {
102
104
  ...data.initializer.compilerOptions ? { "tsconfig.json": loadTsConfig(data).data } : {},
103
105
  "package.json": loadPackageJson(data).data,
104
- [devToolConfigs["biome"].path]: devToolConfigs["biome"].data,
105
- [devToolConfigs["vscSet"].path]: devToolConfigs["vscSet"].data,
106
- [devToolConfigs["vscExt"].path]: devToolConfigs["vscExt"].data
106
+ ...data.initializer.format?.tool !== "prettier" ? { [devToolConfigs["oxfmt"].path]: loadOxfmtConfig(data).data } : {},
107
+ [devToolConfigs["oxlint"].path]: loadOxlintConfig(data).data,
108
+ [devToolConfigs["vscSet"].path]: loadVscodeSettings(data).data,
109
+ [devToolConfigs["vscExt"].path]: loadVscodeExtensions(data).data
107
110
  };
108
111
  jsonsCache.set(cacheKey, jsons);
109
112
  return jsons;
@@ -118,7 +121,8 @@ const getGeneratedFilePaths = (data) => [
118
121
  data.initializer.loggingFile,
119
122
  ".env",
120
123
  ...Object.keys(data.initializer.files ?? {}),
121
- ...Object.keys(getJsons(data))
124
+ ...Object.keys(getJsons(data)),
125
+ ...(data.initializer.cleanupFiles ?? []).filter((path) => path.trim() !== "")
122
126
  ];
123
127
  const getExistingGeneratedFiles = async (data) => {
124
128
  const paths = [...new Set(getGeneratedFilePaths(data))];
@@ -136,7 +140,7 @@ const pathExists = async (path) => {
136
140
  }
137
141
  };
138
142
  const formatConflictMessage = (conflicts) => [
139
- "Cannot initialize in a non-empty directory because these generated files",
143
+ "Cannot initialize in a non-empty directory because these files",
140
144
  "already exist:",
141
145
  ...conflicts.map((path) => ` - ${path}`),
142
146
  "Remove the conflicting files or choose another directory."
@@ -186,21 +190,28 @@ async function patchContent(path, content) {
186
190
  * Merges new JSON data with existing JSON content and formats the result.
187
191
  * Parses existing JSON content (if any) and deep merges it with new data,
188
192
  * then formats the result for consistent output.
189
- * Supports JSONC (JSON with Comments) by removing comments before parsing.
193
+ * Supports JSONC by removing comments and trailing commas before parsing.
190
194
  *
191
195
  * @param prev - The previous JSON content as string
192
196
  * @param data - The new data object to merge
193
197
  * @returns Formatted JSON string with merged content
194
198
  */
195
- const mergeJson = (prev, data) => pipe(prev ? JSON.parse(removeJsonComments(prev)) : {}, merge(data), formatJson);
199
+ const mergeJson = (prev, data) => formatJson(merge(data)(prev ? parseJsoncObject(prev) : {}));
196
200
  /**
197
- * Removes single-line (//) and multi-line (/* *\/) comments from JSON string.
198
- * This allows parsing JSONC (JSON with Comments) files.
201
+ * Parses a JSONC string, accepting comments and trailing commas.
199
202
  *
200
- * @param jsonString - The JSON string potentially containing comments
201
- * @returns JSON string with comments removed
203
+ * @param jsonString - The JSON string potentially containing JSONC syntax
204
+ * @returns Parsed JSON value
202
205
  */
203
- const removeJsonComments = (jsonString) => pipe(jsonString, replaceAll(/\/\/.*$/gm, ""), replaceAll(/\/\*[\s\S]*?\*\//g, ""));
206
+ const parseJsoncObject = (jsonString) => {
207
+ const errors = [];
208
+ const value = parse(jsonString, errors, { allowTrailingComma: true });
209
+ if (value === void 0 && isEmptyJsonc(errors)) return {};
210
+ if (errors.length > 0) throw new SyntaxError(errors.map(({ error, offset }) => `${printParseErrorCode(error)} at ${offset}`).join("; "));
211
+ if (value === null || typeof value !== "object" || Array.isArray(value)) throw new SyntaxError("Expected a JSON object.");
212
+ return value;
213
+ };
214
+ const isEmptyJsonc = (errors) => errors.length > 0 && errors.every(({ error }) => printParseErrorCode(error) === "ValueExpected");
204
215
  /**
205
216
  * Appends new text content to existing text content line by line.
206
217
  * Concatenates new content lines with existing content lines,
@@ -13,7 +13,8 @@ import { toMerged } from "es-toolkit";
13
13
  * KV store, message queue, and package manager
14
14
  * @returns The complete federation configuration file content as a string
15
15
  */
16
- const loadFederation = async ({ imports, projectName, kv, mq, packageManager }) => pipe(await readTemplate("defaults/federation.ts"), replace(/\/\* imports \*\//, imports), replace(/\/\* logger \*\//, JSON.stringify(projectName)), replace(/\/\* kv \*\//, convertEnv(kv.object, packageManager)), replace(/\/\* queue \*\//, convertEnv(mq.object, packageManager)));
16
+ const loadFederation = async ({ imports, projectName, kv, mq, packageManager }) => pipe(await readTemplate(getFederationTemplate(packageManager)), replace(/\/\* imports \*\//, imports), replace(/\/\* logger \*\//, JSON.stringify(projectName)), replace(/\/\* kv \*\//, convertEnv(kv.object, packageManager)), replace(/\/\* queue \*\//, convertEnv(mq.object, packageManager)));
17
+ const getFederationTemplate = (packageManager) => packageManager === "deno" ? "defaults/federation.ts" : "defaults/federation.oxc.ts";
17
18
  /**
18
19
  * Loads logging configuration file content for the initializer.
19
20
  *
@@ -58,7 +59,7 @@ const getImports = ({ kv, mq, packageManager, env }) => pipe(toMerged(kv.imports
58
59
  * @param imports - A record mapping import names to their local aliases
59
60
  * @returns A comma-separated string of named imports with aliases where needed
60
61
  */
61
- const getAlias = (imports) => pipe(imports, entries, map(([name, alias]) => name === alias ? name : `${name} as ${alias}`), join(", "));
62
+ const getAlias = (imports) => Object.entries(imports).map(([name, alias]) => name === alias ? name : `${name} as ${alias}`).sort().join(", ");
62
63
  const ENV_REG_EXP = /process\.env\.(\w+)/g;
63
64
  /**
64
65
  * Converts Node.js environment variable access to Deno-compatible syntax when
package/dist/deno.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region deno.json
2
- var version = "2.3.0-pr.809.39+f65f60c0";
2
+ var version = "2.3.0";
3
3
  //#endregion
4
4
  export { version };
package/dist/json/deps.js CHANGED
@@ -1,32 +1,34 @@
1
1
  //#region src/json/deps.json
2
2
  var _hongminhee_x_forwarded_fetch = "^0.2.0";
3
- var _hono_hono = "^4.12.9";
4
- var _logtape_logtape = "^2.1.0";
5
- var _std_dotenv = "^0.225.6";
3
+ var _hono_hono = "^4.12.27";
4
+ var _logtape_logtape = "^2.2.1";
5
+ var _std_dotenv = "^0.225.7";
6
6
  var npm__astrojs_node = "^10.0.4";
7
- var npm__biomejs_biome = "^2.4.9";
8
- var npm__deno_astro_adapter = "^0.3.2";
9
- var npm__dotenvx_dotenvx = "^1.59.1";
7
+ var npm__deno_astro_adapter = "^0.5.2";
8
+ var npm__dotenvx_dotenvx = "^1.75.1";
10
9
  var npm__elysiajs_node = "^1.4.5";
11
10
  var npm__hono_node_server = "^1.19.12";
12
11
  var npm__nurodev_astro_bun = "^2.1.2";
13
12
  var npm__sinclair_typebox = "^0.34.49";
14
13
  var npm__solidjs_router = "^0.16.1";
15
14
  var npm__solidjs_start = "^1.3.2";
16
- var npm__types_bun = "^1.3.11";
15
+ var npm__types_bun = "^1.3.14";
17
16
  var npm__types_express = "^4.17.21";
18
17
  var npm__types_node_20 = "^20.11.2";
19
18
  var npm__types_node_22 = "^22.17.0";
20
19
  var npm__types_node_25 = "^25.5.0";
21
- var npm_elysia = "^1.4.28";
22
- var npm_eslint = "^9.0.0";
20
+ var npm_elysia = "^1.4.29";
23
21
  var npm_express = "^5.2.1";
24
- var npm_hono = "^4.12.9";
22
+ var npm_hono = "^4.12.27";
25
23
  var npm_openapi_types = "^12.1.3";
26
- var npm_solid_js = "^1.9.12";
27
- var npm_tsx = "^4.21.0";
24
+ var npm_oxfmt = "^0.56.0";
25
+ var npm_oxlint = "^1.71.0";
26
+ var npm_prettier = "^3.8.4";
27
+ var npm_prettier_plugin_astro = "^0.14.1";
28
+ var npm_solid_js = "^1.9.13";
29
+ var npm_tsx = "^4.22.4";
28
30
  var npm_typescript = "^5.9.3";
29
31
  var npm_vinxi = "^0.5.11";
30
32
  var npm_x_forwarded_fetch = "^0.2.0";
31
33
  //#endregion
32
- export { _hongminhee_x_forwarded_fetch, _hono_hono, _logtape_logtape, _std_dotenv, npm__astrojs_node, npm__biomejs_biome, npm__deno_astro_adapter, npm__dotenvx_dotenvx, npm__elysiajs_node, npm__hono_node_server, npm__nurodev_astro_bun, npm__sinclair_typebox, npm__solidjs_router, npm__solidjs_start, npm__types_bun, npm__types_express, npm__types_node_20, npm__types_node_22, npm__types_node_25, npm_elysia, npm_eslint, npm_express, npm_hono, npm_openapi_types, npm_solid_js, npm_tsx, npm_typescript, npm_vinxi, npm_x_forwarded_fetch };
34
+ export { _hongminhee_x_forwarded_fetch, _hono_hono, _logtape_logtape, _std_dotenv, npm__astrojs_node, npm__deno_astro_adapter, npm__dotenvx_dotenvx, npm__elysiajs_node, npm__hono_node_server, npm__nurodev_astro_bun, npm__sinclair_typebox, npm__solidjs_router, npm__solidjs_start, npm__types_bun, npm__types_express, npm__types_node_20, npm__types_node_22, npm__types_node_25, npm_elysia, npm_express, npm_hono, npm_openapi_types, npm_oxfmt, npm_oxlint, npm_prettier, npm_prettier_plugin_astro, npm_solid_js, npm_tsx, npm_typescript, npm_vinxi, npm_x_forwarded_fetch };
@@ -1,35 +1,37 @@
1
1
  {
2
2
  "@hongminhee/x-forwarded-fetch": "^0.2.0",
3
- "@hono/hono": "^4.12.9",
4
- "@logtape/logtape": "^2.1.0",
5
- "@std/dotenv": "^0.225.6",
3
+ "@hono/hono": "^4.12.27",
4
+ "@logtape/logtape": "^2.2.1",
5
+ "@std/dotenv": "^0.225.7",
6
6
  "npm:@astrojs/node": "^10.0.4",
7
- "npm:@biomejs/biome": "^2.4.9",
8
- "npm:@deno/astro-adapter": "^0.3.2",
9
- "npm:@dotenvx/dotenvx": "^1.59.1",
7
+ "npm:@deno/astro-adapter": "^0.5.2",
8
+ "npm:@dotenvx/dotenvx": "^1.75.1",
10
9
  "npm:@elysiajs/node": "^1.4.5",
11
10
  "npm:@hono/node-server": "^1.19.12",
12
- "npm:@nuxt/kit": "^4.4.2",
11
+ "npm:@nuxt/kit": "^4.4.8",
13
12
  "npm:@nurodev/astro-bun": "^2.1.2",
14
13
  "npm:@sinclair/typebox": "^0.34.49",
15
14
  "npm:@solidjs/router": "^0.16.1",
16
15
  "npm:@solidjs/start": "^1.3.2",
17
- "npm:@types/bun": "^1.3.11",
16
+ "npm:@types/bun": "^1.3.14",
18
17
  "npm:@types/express": "^4.17.21",
19
18
  "npm:@types/node@20": "^20.11.2",
20
19
  "npm:@types/node@22": "^22.17.0",
21
20
  "npm:@types/node@25": "^25.5.0",
22
21
  "npm:astro": "^6.1.1",
23
- "npm:elysia": "^1.4.28",
24
- "npm:eslint": "^9.0.0",
22
+ "npm:elysia": "^1.4.29",
25
23
  "npm:express": "^5.2.1",
26
24
  "npm:h3": "^1.15.0",
27
- "npm:hono": "^4.12.9",
28
- "npm:nuxi": "^3.34.0",
29
- "npm:nuxt": "^4.4.2",
25
+ "npm:hono": "^4.12.27",
26
+ "npm:nuxi": "^3.36.0",
27
+ "npm:nuxt": "^4.4.8",
30
28
  "npm:openapi-types": "^12.1.3",
31
- "npm:solid-js": "^1.9.12",
32
- "npm:tsx": "^4.21.0",
29
+ "npm:oxfmt": "^0.56.0",
30
+ "npm:oxlint": "^1.71.0",
31
+ "npm:prettier": "^3.8.4",
32
+ "npm:prettier-plugin-astro": "^0.14.1",
33
+ "npm:solid-js": "^1.9.13",
34
+ "npm:tsx": "^4.22.4",
33
35
  "npm:typescript": "^5.9.3",
34
36
  "npm:vinxi": "^0.5.11",
35
37
  "npm:x-forwarded-fetch": "^0.2.0"
package/dist/json/kv.js CHANGED
@@ -21,7 +21,7 @@ var kv_default = {
21
21
  "yarn",
22
22
  "pnpm"
23
23
  ],
24
- "dependencies": { "npm:ioredis": "^5.10.1" },
24
+ "dependencies": { "npm:ioredis": "^5.11.1" },
25
25
  "imports": {
26
26
  "@fedify/redis": { "RedisKvStore": "RedisKvStore" },
27
27
  "ioredis": { "Redis": "Redis" }
@@ -38,7 +38,7 @@ var kv_default = {
38
38
  "yarn",
39
39
  "pnpm"
40
40
  ],
41
- "dependencies": { "npm:postgres": "^3.4.8" },
41
+ "dependencies": { "npm:postgres": "^3.4.9" },
42
42
  "imports": {
43
43
  "@fedify/postgres": { "PostgresKvStore": "PostgresKvStore" },
44
44
  "postgres": { "default": "postgres" }
@@ -55,7 +55,7 @@ var kv_default = {
55
55
  "yarn",
56
56
  "pnpm"
57
57
  ],
58
- "dependencies": { "npm:mysql2": "^3.22.3" },
58
+ "dependencies": { "npm:mysql2": "^3.22.5" },
59
59
  "imports": {
60
60
  "@fedify/mysql": { "MysqlKvStore": "MysqlKvStore" },
61
61
  "mysql2/promise": { "default": "mysql" }
package/dist/json/kv.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "pnpm"
26
26
  ],
27
27
  "dependencies": {
28
- "npm:ioredis": "^5.10.1"
28
+ "npm:ioredis": "^5.11.1"
29
29
  },
30
30
  "imports": {
31
31
  "@fedify/redis": {
@@ -50,7 +50,7 @@
50
50
  "pnpm"
51
51
  ],
52
52
  "dependencies": {
53
- "npm:postgres": "^3.4.8"
53
+ "npm:postgres": "^3.4.9"
54
54
  },
55
55
  "imports": {
56
56
  "@fedify/postgres": {
@@ -75,7 +75,7 @@
75
75
  "pnpm"
76
76
  ],
77
77
  "dependencies": {
78
- "npm:mysql2": "^3.22.3"
78
+ "npm:mysql2": "^3.22.5"
79
79
  },
80
80
  "imports": {
81
81
  "@fedify/mysql": {
package/dist/json/mq.js CHANGED
@@ -21,7 +21,7 @@ var mq_default = {
21
21
  "yarn",
22
22
  "pnpm"
23
23
  ],
24
- "dependencies": { "npm:ioredis": "^5.10.1" },
24
+ "dependencies": { "npm:ioredis": "^5.11.1" },
25
25
  "imports": {
26
26
  "@fedify/redis": { "RedisMessageQueue": "RedisMessageQueue" },
27
27
  "ioredis": { "Redis": "Redis" }
@@ -38,7 +38,7 @@ var mq_default = {
38
38
  "yarn",
39
39
  "pnpm"
40
40
  ],
41
- "dependencies": { "npm:postgres": "^3.4.8" },
41
+ "dependencies": { "npm:postgres": "^3.4.9" },
42
42
  "imports": {
43
43
  "@fedify/postgres": { "PostgresMessageQueue": "PostgresMessageQueue" },
44
44
  "postgres": { "default": "postgres" }
@@ -55,7 +55,7 @@ var mq_default = {
55
55
  "yarn",
56
56
  "pnpm"
57
57
  ],
58
- "dependencies": { "npm:mysql2": "^3.22.3" },
58
+ "dependencies": { "npm:mysql2": "^3.22.5" },
59
59
  "imports": {
60
60
  "@fedify/mysql": { "MysqlMessageQueue": "MysqlMessageQueue" },
61
61
  "mysql2/promise": { "default": "mysql" }
package/dist/json/mq.json CHANGED
@@ -25,7 +25,7 @@
25
25
  "pnpm"
26
26
  ],
27
27
  "dependencies": {
28
- "npm:ioredis": "^5.10.1"
28
+ "npm:ioredis": "^5.11.1"
29
29
  },
30
30
  "imports": {
31
31
  "@fedify/redis": {
@@ -50,7 +50,7 @@
50
50
  "pnpm"
51
51
  ],
52
52
  "dependencies": {
53
- "npm:postgres": "^3.4.8"
53
+ "npm:postgres": "^3.4.9"
54
54
  },
55
55
  "imports": {
56
56
  "@fedify/postgres": {
@@ -75,7 +75,7 @@
75
75
  "pnpm"
76
76
  ],
77
77
  "dependencies": {
78
- "npm:mysql2": "^3.22.3"
78
+ "npm:mysql2": "^3.22.5"
79
79
  },
80
80
  "imports": {
81
81
  "@fedify/mysql": {
@@ -0,0 +1,16 @@
1
+ //#region src/json/oxfmt.json
2
+ var oxfmt_default = {
3
+ $schema: "./node_modules/oxfmt/configuration_schema.json",
4
+ ignorePatterns: [
5
+ "**/*.md",
6
+ "build/**",
7
+ "coverage/**",
8
+ "dist/**",
9
+ "node_modules/**"
10
+ ],
11
+ sortPackageJson: false,
12
+ tabWidth: 2,
13
+ useTabs: false
14
+ };
15
+ //#endregion
16
+ export { oxfmt_default as default };
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
3
+ "ignorePatterns": [
4
+ "**/*.md",
5
+ "build/**",
6
+ "coverage/**",
7
+ "dist/**",
8
+ "node_modules/**"
9
+ ],
10
+ "sortPackageJson": false,
11
+ "tabWidth": 2,
12
+ "useTabs": false
13
+ }
@@ -0,0 +1,38 @@
1
+ //#region src/json/oxlint.json
2
+ var oxlint_default = {
3
+ $schema: "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json",
4
+ ignorePatterns: [
5
+ "**/*.md",
6
+ "build/**",
7
+ "coverage/**",
8
+ "dist/**",
9
+ "node_modules/**"
10
+ ],
11
+ jsPlugins: ["@fedify/lint/oxlint"],
12
+ rules: {
13
+ "@fedify/lint/actor-id-mismatch": "error",
14
+ "@fedify/lint/actor-id-required": "error",
15
+ "@fedify/lint/actor-following-property-required": "warn",
16
+ "@fedify/lint/actor-following-property-mismatch": "warn",
17
+ "@fedify/lint/actor-followers-property-required": "warn",
18
+ "@fedify/lint/actor-followers-property-mismatch": "warn",
19
+ "@fedify/lint/actor-outbox-property-required": "warn",
20
+ "@fedify/lint/actor-outbox-property-mismatch": "warn",
21
+ "@fedify/lint/actor-liked-property-required": "warn",
22
+ "@fedify/lint/actor-liked-property-mismatch": "warn",
23
+ "@fedify/lint/actor-featured-property-required": "warn",
24
+ "@fedify/lint/actor-featured-property-mismatch": "warn",
25
+ "@fedify/lint/actor-featured-tags-property-required": "warn",
26
+ "@fedify/lint/actor-featured-tags-property-mismatch": "warn",
27
+ "@fedify/lint/actor-inbox-property-required": "warn",
28
+ "@fedify/lint/actor-inbox-property-mismatch": "warn",
29
+ "@fedify/lint/actor-shared-inbox-property-required": "warn",
30
+ "@fedify/lint/actor-shared-inbox-property-mismatch": "warn",
31
+ "@fedify/lint/actor-public-key-required": "warn",
32
+ "@fedify/lint/actor-assertion-method-required": "warn",
33
+ "@fedify/lint/collection-filtering-not-implemented": "warn",
34
+ "@fedify/lint/outbox-listener-delivery-required": "warn"
35
+ }
36
+ };
37
+ //#endregion
38
+ export { oxlint_default as default };
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/oxc-project/oxc/main/npm/oxlint/configuration_schema.json",
3
+ "ignorePatterns": [
4
+ "**/*.md",
5
+ "build/**",
6
+ "coverage/**",
7
+ "dist/**",
8
+ "node_modules/**"
9
+ ],
10
+ "jsPlugins": [
11
+ "@fedify/lint/oxlint"
12
+ ],
13
+ "rules": {
14
+ "@fedify/lint/actor-id-mismatch": "error",
15
+ "@fedify/lint/actor-id-required": "error",
16
+ "@fedify/lint/actor-following-property-required": "warn",
17
+ "@fedify/lint/actor-following-property-mismatch": "warn",
18
+ "@fedify/lint/actor-followers-property-required": "warn",
19
+ "@fedify/lint/actor-followers-property-mismatch": "warn",
20
+ "@fedify/lint/actor-outbox-property-required": "warn",
21
+ "@fedify/lint/actor-outbox-property-mismatch": "warn",
22
+ "@fedify/lint/actor-liked-property-required": "warn",
23
+ "@fedify/lint/actor-liked-property-mismatch": "warn",
24
+ "@fedify/lint/actor-featured-property-required": "warn",
25
+ "@fedify/lint/actor-featured-property-mismatch": "warn",
26
+ "@fedify/lint/actor-featured-tags-property-required": "warn",
27
+ "@fedify/lint/actor-featured-tags-property-mismatch": "warn",
28
+ "@fedify/lint/actor-inbox-property-required": "warn",
29
+ "@fedify/lint/actor-inbox-property-mismatch": "warn",
30
+ "@fedify/lint/actor-shared-inbox-property-required": "warn",
31
+ "@fedify/lint/actor-shared-inbox-property-mismatch": "warn",
32
+ "@fedify/lint/actor-public-key-required": "warn",
33
+ "@fedify/lint/actor-assertion-method-required": "warn",
34
+ "@fedify/lint/collection-filtering-not-implemented": "warn",
35
+ "@fedify/lint/outbox-listener-delivery-required": "warn"
36
+ }
37
+ }