@fedify/init 2.0.0-dev.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 (78) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +93 -0
  3. package/dist/action/configs.mjs +89 -0
  4. package/dist/action/const.mjs +7 -0
  5. package/dist/action/deps.mjs +50 -0
  6. package/dist/action/dir.mjs +13 -0
  7. package/dist/action/env.mjs +10 -0
  8. package/dist/action/install.mjs +17 -0
  9. package/dist/action/mod.d.mts +23 -0
  10. package/dist/action/mod.mjs +38 -0
  11. package/dist/action/notice.mjs +52 -0
  12. package/dist/action/patch.mjs +143 -0
  13. package/dist/action/precommand.mjs +25 -0
  14. package/dist/action/recommend.mjs +21 -0
  15. package/dist/action/set.mjs +28 -0
  16. package/dist/action/templates.mjs +55 -0
  17. package/dist/action/utils.mjs +47 -0
  18. package/dist/ask/dir.mjs +79 -0
  19. package/dist/ask/kv.mjs +41 -0
  20. package/dist/ask/mod.mjs +13 -0
  21. package/dist/ask/mq.mjs +43 -0
  22. package/dist/ask/pm.mjs +49 -0
  23. package/dist/ask/wf.mjs +26 -0
  24. package/dist/command.d.mts +41 -0
  25. package/dist/command.mjs +44 -0
  26. package/dist/const.d.mts +4 -0
  27. package/dist/const.mjs +34 -0
  28. package/dist/deno.mjs +5 -0
  29. package/dist/json/biome.json +14 -0
  30. package/dist/json/biome.mjs +14 -0
  31. package/dist/json/db-to-check.json +17 -0
  32. package/dist/json/db-to-check.mjs +21 -0
  33. package/dist/json/kv.json +39 -0
  34. package/dist/json/kv.mjs +47 -0
  35. package/dist/json/mq.json +95 -0
  36. package/dist/json/mq.mjs +65 -0
  37. package/dist/json/pm.json +47 -0
  38. package/dist/json/pm.mjs +36 -0
  39. package/dist/json/rt.json +42 -0
  40. package/dist/json/rt.mjs +31 -0
  41. package/dist/json/vscode-settings-for-deno.json +43 -0
  42. package/dist/json/vscode-settings-for-deno.mjs +39 -0
  43. package/dist/json/vscode-settings.json +41 -0
  44. package/dist/json/vscode-settings.mjs +37 -0
  45. package/dist/lib.mjs +129 -0
  46. package/dist/mod.d.mts +3 -0
  47. package/dist/mod.mjs +4 -0
  48. package/dist/templates/defaults/eslint.config.ts.tpl +3 -0
  49. package/dist/templates/defaults/federation.ts.tpl +24 -0
  50. package/dist/templates/defaults/logging.ts.tpl +23 -0
  51. package/dist/templates/elysia/index/bun.ts.tpl +13 -0
  52. package/dist/templates/elysia/index/deno.ts.tpl +19 -0
  53. package/dist/templates/elysia/index/node.ts.tpl +14 -0
  54. package/dist/templates/express/app.ts.tpl +16 -0
  55. package/dist/templates/express/index.ts.tpl +6 -0
  56. package/dist/templates/hono/app.tsx.tpl +14 -0
  57. package/dist/templates/hono/index/bun.ts.tpl +10 -0
  58. package/dist/templates/hono/index/deno.ts.tpl +13 -0
  59. package/dist/templates/hono/index/node.ts.tpl +14 -0
  60. package/dist/templates/next/middleware.ts.tpl +45 -0
  61. package/dist/templates/nitro/.env.test.tpl +1 -0
  62. package/dist/templates/nitro/nitro.config.ts.tpl +14 -0
  63. package/dist/templates/nitro/server/error.ts.tpl +3 -0
  64. package/dist/templates/nitro/server/middleware/federation.ts.tpl +8 -0
  65. package/dist/test/action.mjs +15 -0
  66. package/dist/test/create.mjs +92 -0
  67. package/dist/test/db.mjs +42 -0
  68. package/dist/test/fill.mjs +29 -0
  69. package/dist/test/lookup.mjs +183 -0
  70. package/dist/test/mod.d.mts +1 -0
  71. package/dist/test/mod.mjs +16 -0
  72. package/dist/test/run.mjs +22 -0
  73. package/dist/test/utils.mjs +15 -0
  74. package/dist/types.d.mts +50 -0
  75. package/dist/utils.d.mts +9 -0
  76. package/dist/utils.mjs +102 -0
  77. package/dist/webframeworks.mjs +220 -0
  78. package/package.json +66 -0
@@ -0,0 +1,95 @@
1
+ {
2
+ "redis": {
3
+ "label": "Redis",
4
+ "packageManagers": [
5
+ "deno",
6
+ "bun",
7
+ "npm",
8
+ "yarn",
9
+ "pnpm"
10
+ ],
11
+ "dependencies": {
12
+ "npm:ioredis": "^5.4.1"
13
+ },
14
+ "imports": {
15
+ "@fedify/redis": {
16
+ "RedisMessageQueue": "RedisMessageQueue"
17
+ },
18
+ "ioredis": {
19
+ "Redis": "Redis"
20
+ }
21
+ },
22
+ "object": "new RedisMessageQueue(() => new Redis(process.env.REDIS_URL))",
23
+ "env": {
24
+ "REDIS_URL": "redis://localhost:6379"
25
+ }
26
+ },
27
+ "postgres": {
28
+ "label": "PostgreSQL",
29
+ "packageManagers": [
30
+ "deno",
31
+ "bun",
32
+ "npm",
33
+ "yarn",
34
+ "pnpm"
35
+ ],
36
+ "dependencies": {
37
+ "npm:postgres": "^3.4.5"
38
+ },
39
+ "imports": {
40
+ "@fedify/postgres": {
41
+ "PostgresMessageQueue": "PostgresMessageQueue"
42
+ },
43
+ "postgres": {
44
+ "default": "postgres"
45
+ }
46
+ },
47
+ "object": "new PostgresMessageQueue(postgres(process.env.POSTGRES_URL))",
48
+ "env": {
49
+ "POSTGRES_URL": "postgres://postgres@localhost:5432/postgres"
50
+ }
51
+ },
52
+ "amqp": {
53
+ "label": "AMQP (e.g., RabbitMQ)",
54
+ "packageManagers": [
55
+ "deno",
56
+ "bun",
57
+ "npm",
58
+ "yarn",
59
+ "pnpm"
60
+ ],
61
+ "dependencies": {
62
+ "npm:amqplib": "^0.10.4"
63
+ },
64
+ "devDependencies": {
65
+ "npm:@types/amqplib": "^0.10.5"
66
+ },
67
+ "imports": {
68
+ "@fedify/amqp": {
69
+ "AmqpMessageQueue": "AmqpMessageQueue"
70
+ },
71
+ "amqplib": {
72
+ "connect": "connect"
73
+ }
74
+ },
75
+ "object": "new AmqpMessageQueue(await connect(process.env.AMQP_URL))",
76
+ "env": {
77
+ "AMQP_URL": "amqp://localhost"
78
+ }
79
+ },
80
+ "denokv": {
81
+ "label": "Deno KV",
82
+ "packageManagers": [
83
+ "deno"
84
+ ],
85
+ "imports": {
86
+ "@fedify/denokv": {
87
+ "DenoKvMessageQueue": "DenoKvMessageQueue"
88
+ }
89
+ },
90
+ "object": "new DenoKvMessageQueue(await Deno.openKv())",
91
+ "denoUnstable": [
92
+ "kv"
93
+ ]
94
+ }
95
+ }
@@ -0,0 +1,65 @@
1
+ //#region src/json/mq.json
2
+ var mq_default = {
3
+ redis: {
4
+ "label": "Redis",
5
+ "packageManagers": [
6
+ "deno",
7
+ "bun",
8
+ "npm",
9
+ "yarn",
10
+ "pnpm"
11
+ ],
12
+ "dependencies": { "npm:ioredis": "^5.4.1" },
13
+ "imports": {
14
+ "@fedify/redis": { "RedisMessageQueue": "RedisMessageQueue" },
15
+ "ioredis": { "Redis": "Redis" }
16
+ },
17
+ "object": "new RedisMessageQueue(() => new Redis(process.env.REDIS_URL))",
18
+ "env": { "REDIS_URL": "redis://localhost:6379" }
19
+ },
20
+ postgres: {
21
+ "label": "PostgreSQL",
22
+ "packageManagers": [
23
+ "deno",
24
+ "bun",
25
+ "npm",
26
+ "yarn",
27
+ "pnpm"
28
+ ],
29
+ "dependencies": { "npm:postgres": "^3.4.5" },
30
+ "imports": {
31
+ "@fedify/postgres": { "PostgresMessageQueue": "PostgresMessageQueue" },
32
+ "postgres": { "default": "postgres" }
33
+ },
34
+ "object": "new PostgresMessageQueue(postgres(process.env.POSTGRES_URL))",
35
+ "env": { "POSTGRES_URL": "postgres://postgres@localhost:5432/postgres" }
36
+ },
37
+ amqp: {
38
+ "label": "AMQP (e.g., RabbitMQ)",
39
+ "packageManagers": [
40
+ "deno",
41
+ "bun",
42
+ "npm",
43
+ "yarn",
44
+ "pnpm"
45
+ ],
46
+ "dependencies": { "npm:amqplib": "^0.10.4" },
47
+ "devDependencies": { "npm:@types/amqplib": "^0.10.5" },
48
+ "imports": {
49
+ "@fedify/amqp": { "AmqpMessageQueue": "AmqpMessageQueue" },
50
+ "amqplib": { "connect": "connect" }
51
+ },
52
+ "object": "new AmqpMessageQueue(await connect(process.env.AMQP_URL))",
53
+ "env": { "AMQP_URL": "amqp://localhost" }
54
+ },
55
+ denokv: {
56
+ "label": "Deno KV",
57
+ "packageManagers": ["deno"],
58
+ "imports": { "@fedify/denokv": { "DenoKvMessageQueue": "DenoKvMessageQueue" } },
59
+ "object": "new DenoKvMessageQueue(await Deno.openKv())",
60
+ "denoUnstable": ["kv"]
61
+ }
62
+ };
63
+
64
+ //#endregion
65
+ export { mq_default as default };
@@ -0,0 +1,47 @@
1
+ {
2
+ "deno": {
3
+ "label": "deno",
4
+ "checkCommand": [
5
+ "deno",
6
+ "--version"
7
+ ],
8
+ "outputPattern": "^deno\\s+\\d+\\.\\d+\\.\\d+\\b",
9
+ "installUrl": "https://docs.deno.com/runtime/getting_started/installation"
10
+ },
11
+ "bun": {
12
+ "label": "bun",
13
+ "checkCommand": [
14
+ "bun",
15
+ "--version"
16
+ ],
17
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
18
+ "installUrl": "https://bun.sh/docs/installation"
19
+ },
20
+ "npm": {
21
+ "label": "npm",
22
+ "checkCommand": [
23
+ "npm",
24
+ "--version"
25
+ ],
26
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
27
+ "installUrl": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm"
28
+ },
29
+ "yarn": {
30
+ "label": "Yarn",
31
+ "checkCommand": [
32
+ "yarn",
33
+ "--version"
34
+ ],
35
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
36
+ "installUrl": "https://classic.yarnpkg.com/en/docs/install/#windows-stable"
37
+ },
38
+ "pnpm": {
39
+ "label": "pnpm",
40
+ "checkCommand": [
41
+ "pnpm",
42
+ "--version"
43
+ ],
44
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
45
+ "installUrl": "https://pnpm.io/installation"
46
+ }
47
+ }
@@ -0,0 +1,36 @@
1
+ //#region src/json/pm.json
2
+ var pm_default = {
3
+ deno: {
4
+ "label": "deno",
5
+ "checkCommand": ["deno", "--version"],
6
+ "outputPattern": "^deno\\s+\\d+\\.\\d+\\.\\d+\\b",
7
+ "installUrl": "https://docs.deno.com/runtime/getting_started/installation"
8
+ },
9
+ bun: {
10
+ "label": "bun",
11
+ "checkCommand": ["bun", "--version"],
12
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
13
+ "installUrl": "https://bun.sh/docs/installation"
14
+ },
15
+ npm: {
16
+ "label": "npm",
17
+ "checkCommand": ["npm", "--version"],
18
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
19
+ "installUrl": "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm"
20
+ },
21
+ yarn: {
22
+ "label": "Yarn",
23
+ "checkCommand": ["yarn", "--version"],
24
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
25
+ "installUrl": "https://classic.yarnpkg.com/en/docs/install/#windows-stable"
26
+ },
27
+ pnpm: {
28
+ "label": "pnpm",
29
+ "checkCommand": ["pnpm", "--version"],
30
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$",
31
+ "installUrl": "https://pnpm.io/installation"
32
+ }
33
+ };
34
+
35
+ //#endregion
36
+ export { pm_default as default };
@@ -0,0 +1,42 @@
1
+ {
2
+ "deno": {
3
+ "label": "Deno",
4
+ "checkCommand": [
5
+ "deno",
6
+ "--version"
7
+ ],
8
+ "outputPattern": "^deno\\s+\\d+\\.\\d+\\.\\d+\\b"
9
+ },
10
+ "bun": {
11
+ "label": "Bun",
12
+ "checkCommand": [
13
+ "bun",
14
+ "--version"
15
+ ],
16
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$"
17
+ },
18
+ "pnpm": {
19
+ "label": "Node.js",
20
+ "checkCommand": [
21
+ "node",
22
+ "--version"
23
+ ],
24
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
25
+ },
26
+ "yarn": {
27
+ "label": "Node.js",
28
+ "checkCommand": [
29
+ "node",
30
+ "--version"
31
+ ],
32
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
33
+ },
34
+ "npm": {
35
+ "label": "Node.js",
36
+ "checkCommand": [
37
+ "node",
38
+ "--version"
39
+ ],
40
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
41
+ }
42
+ }
@@ -0,0 +1,31 @@
1
+ //#region src/json/rt.json
2
+ var rt_default = {
3
+ deno: {
4
+ "label": "Deno",
5
+ "checkCommand": ["deno", "--version"],
6
+ "outputPattern": "^deno\\s+\\d+\\.\\d+\\.\\d+\\b"
7
+ },
8
+ bun: {
9
+ "label": "Bun",
10
+ "checkCommand": ["bun", "--version"],
11
+ "outputPattern": "^\\d+\\.\\d+\\.\\d+$"
12
+ },
13
+ pnpm: {
14
+ "label": "Node.js",
15
+ "checkCommand": ["node", "--version"],
16
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
17
+ },
18
+ yarn: {
19
+ "label": "Node.js",
20
+ "checkCommand": ["node", "--version"],
21
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
22
+ },
23
+ npm: {
24
+ "label": "Node.js",
25
+ "checkCommand": ["node", "--version"],
26
+ "outputPattern": "^v\\d+\\.\\d+\\.\\d+$"
27
+ }
28
+ };
29
+
30
+ //#endregion
31
+ export { rt_default as default };
@@ -0,0 +1,43 @@
1
+ {
2
+ "deno.enable": true,
3
+ "deno.unstable": true,
4
+ "editor.detectIndentation": false,
5
+ "editor.indentSize": 2,
6
+ "editor.insertSpaces": true,
7
+ "[javascript]": {
8
+ "editor.defaultFormatter": "denoland.vscode-deno",
9
+ "editor.formatOnSave": true,
10
+ "editor.codeActionsOnSave": {
11
+ "source.sortImports": "always"
12
+ }
13
+ },
14
+ "[javascriptreact]": {
15
+ "editor.defaultFormatter": "denoland.vscode-deno",
16
+ "editor.formatOnSave": true,
17
+ "editor.codeActionsOnSave": {
18
+ "source.sortImports": "always"
19
+ }
20
+ },
21
+ "[json]": {
22
+ "editor.defaultFormatter": "vscode.json-language-features",
23
+ "editor.formatOnSave": true
24
+ },
25
+ "[jsonc]": {
26
+ "editor.defaultFormatter": "vscode.json-language-features",
27
+ "editor.formatOnSave": true
28
+ },
29
+ "[typescript]": {
30
+ "editor.defaultFormatter": "denoland.vscode-deno",
31
+ "editor.formatOnSave": true,
32
+ "editor.codeActionsOnSave": {
33
+ "source.sortImports": "always"
34
+ }
35
+ },
36
+ "[typescriptreact]": {
37
+ "editor.defaultFormatter": "denoland.vscode-deno",
38
+ "editor.formatOnSave": true,
39
+ "editor.codeActionsOnSave": {
40
+ "source.sortImports": "always"
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,39 @@
1
+ //#region src/json/vscode-settings-for-deno.json
2
+ var vscode_settings_for_deno_default = {
3
+ "deno.enable": true,
4
+ "deno.unstable": true,
5
+ "editor.detectIndentation": false,
6
+ "editor.indentSize": 2,
7
+ "editor.insertSpaces": true,
8
+ "[javascript]": {
9
+ "editor.defaultFormatter": "denoland.vscode-deno",
10
+ "editor.formatOnSave": true,
11
+ "editor.codeActionsOnSave": { "source.sortImports": "always" }
12
+ },
13
+ "[javascriptreact]": {
14
+ "editor.defaultFormatter": "denoland.vscode-deno",
15
+ "editor.formatOnSave": true,
16
+ "editor.codeActionsOnSave": { "source.sortImports": "always" }
17
+ },
18
+ "[json]": {
19
+ "editor.defaultFormatter": "vscode.json-language-features",
20
+ "editor.formatOnSave": true
21
+ },
22
+ "[jsonc]": {
23
+ "editor.defaultFormatter": "vscode.json-language-features",
24
+ "editor.formatOnSave": true
25
+ },
26
+ "[typescript]": {
27
+ "editor.defaultFormatter": "denoland.vscode-deno",
28
+ "editor.formatOnSave": true,
29
+ "editor.codeActionsOnSave": { "source.sortImports": "always" }
30
+ },
31
+ "[typescriptreact]": {
32
+ "editor.defaultFormatter": "denoland.vscode-deno",
33
+ "editor.formatOnSave": true,
34
+ "editor.codeActionsOnSave": { "source.sortImports": "always" }
35
+ }
36
+ };
37
+
38
+ //#endregion
39
+ export { vscode_settings_for_deno_default as default };
@@ -0,0 +1,41 @@
1
+ {
2
+ "editor.detectIndentation": false,
3
+ "editor.indentSize": 2,
4
+ "editor.insertSpaces": true,
5
+ "[javascript]": {
6
+ "editor.defaultFormatter": "biomejs.biome",
7
+ "editor.formatOnSave": true,
8
+ "editor.codeActionsOnSave": {
9
+ "source.organizeImports.biome": "always"
10
+ }
11
+ },
12
+ "[javascriptreact]": {
13
+ "editor.defaultFormatter": "biomejs.biome",
14
+ "editor.formatOnSave": true,
15
+ "editor.codeActionsOnSave": {
16
+ "source.organizeImports.biome": "always"
17
+ }
18
+ },
19
+ "[json]": {
20
+ "editor.defaultFormatter": "biomejs.biome",
21
+ "editor.formatOnSave": true
22
+ },
23
+ "[jsonc]": {
24
+ "editor.defaultFormatter": "biomejs.biome",
25
+ "editor.formatOnSave": true
26
+ },
27
+ "[typescript]": {
28
+ "editor.defaultFormatter": "biomejs.biome",
29
+ "editor.formatOnSave": true,
30
+ "editor.codeActionsOnSave": {
31
+ "source.organizeImports.biome": "always"
32
+ }
33
+ },
34
+ "[typescriptreact]": {
35
+ "editor.defaultFormatter": "biomejs.biome",
36
+ "editor.formatOnSave": true,
37
+ "editor.codeActionsOnSave": {
38
+ "source.organizeImports.biome": "always"
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,37 @@
1
+ //#region src/json/vscode-settings.json
2
+ var vscode_settings_default = {
3
+ "editor.detectIndentation": false,
4
+ "editor.indentSize": 2,
5
+ "editor.insertSpaces": true,
6
+ "[javascript]": {
7
+ "editor.defaultFormatter": "biomejs.biome",
8
+ "editor.formatOnSave": true,
9
+ "editor.codeActionsOnSave": { "source.organizeImports.biome": "always" }
10
+ },
11
+ "[javascriptreact]": {
12
+ "editor.defaultFormatter": "biomejs.biome",
13
+ "editor.formatOnSave": true,
14
+ "editor.codeActionsOnSave": { "source.organizeImports.biome": "always" }
15
+ },
16
+ "[json]": {
17
+ "editor.defaultFormatter": "biomejs.biome",
18
+ "editor.formatOnSave": true
19
+ },
20
+ "[jsonc]": {
21
+ "editor.defaultFormatter": "biomejs.biome",
22
+ "editor.formatOnSave": true
23
+ },
24
+ "[typescript]": {
25
+ "editor.defaultFormatter": "biomejs.biome",
26
+ "editor.formatOnSave": true,
27
+ "editor.codeActionsOnSave": { "source.organizeImports.biome": "always" }
28
+ },
29
+ "[typescriptreact]": {
30
+ "editor.defaultFormatter": "biomejs.biome",
31
+ "editor.formatOnSave": true,
32
+ "editor.codeActionsOnSave": { "source.organizeImports.biome": "always" }
33
+ }
34
+ };
35
+
36
+ //#endregion
37
+ export { vscode_settings_default as default };
package/dist/lib.mjs ADDED
@@ -0,0 +1,129 @@
1
+ import { isNotFoundError, runSubCommand } from "./utils.mjs";
2
+ import { version } from "./deno.mjs";
3
+ import kv_default from "./json/kv.mjs";
4
+ import mq_default from "./json/mq.mjs";
5
+ import pm_default from "./json/pm.mjs";
6
+ import rt_default from "./json/rt.mjs";
7
+ import { entries, evolve, fromEntries, isObject, map, negate, pipe, throwIf } from "@fxts/core";
8
+ import process from "node:process";
9
+ import { commandLine, message } from "@optique/core/message";
10
+ import { toMerged } from "es-toolkit";
11
+ import { getLogger } from "@logtape/logtape";
12
+ import { readFileSync } from "node:fs";
13
+ import { mkdir, readdir, writeFile } from "node:fs/promises";
14
+ import { dirname, join as join$1 } from "node:path";
15
+
16
+ //#region src/lib.ts
17
+ const PACKAGE_VERSION = version;
18
+ const logger = getLogger([
19
+ "fedify",
20
+ "cli",
21
+ "init"
22
+ ]);
23
+ const addFedifyDeps = (json) => Object.fromEntries(Object.entries(json).map(([key, value]) => [key, toMerged(value, { dependencies: { [`@fedify/${key}`]: PACKAGE_VERSION } })]));
24
+ const kvStores = addFedifyDeps(kv_default);
25
+ const messageQueues = addFedifyDeps(mq_default);
26
+ const toRegExp = (str) => new RegExp(str);
27
+ const convertPattern = (obj) => pipe(obj, entries, map(([key, value]) => [key, evolve({ outputPattern: toRegExp })(value)]), fromEntries);
28
+ const packageManagers = convertPattern(pm_default);
29
+ const runtimes = convertPattern(rt_default);
30
+ const getInstallUrl = (pm) => packageManagers[pm].installUrl;
31
+ async function isPackageManagerAvailable(pm) {
32
+ if (await isCommandAvailable(packageManagers[pm])) return true;
33
+ if (process.platform !== "win32") return false;
34
+ const cmd = [packageManagers[pm].checkCommand[0] + ".cmd", ...packageManagers[pm].checkCommand.slice(1)];
35
+ if (await isCommandAvailable({
36
+ ...packageManagers[pm],
37
+ checkCommand: cmd
38
+ })) return true;
39
+ return false;
40
+ }
41
+ const readTemplate = (templatePath) => readFileSync(join$1(import.meta.dirname, "templates", ...(templatePath + ".tpl").split("/")), "utf8");
42
+ const getInstruction = (pm, port) => message`
43
+ To start the server, run the following command:
44
+
45
+ ${commandLine(getDevCommand(pm))}
46
+
47
+ Then, try look up an actor from your server:
48
+
49
+ ${commandLine(`fedify lookup http://localhost:${port}/users/john`)}
50
+
51
+ `;
52
+ const getDevCommand = (pm) => pm === "deno" ? "deno task dev" : pm === "bun" ? "bun dev" : `${pm} run dev`;
53
+ async function isCommandAvailable({ checkCommand, outputPattern }) {
54
+ try {
55
+ const { stdout } = await runSubCommand(checkCommand, { stdio: [
56
+ null,
57
+ "pipe",
58
+ null
59
+ ] });
60
+ logger.debug("The stdout of the command {command} is: {stdout}", {
61
+ command: checkCommand,
62
+ stdout
63
+ });
64
+ return outputPattern.exec(stdout.trim()) ? true : false;
65
+ } catch (error) {
66
+ if (isNotFoundError(error)) return false;
67
+ logger.debug("The command {command} failed with the error: {error}", {
68
+ command: checkCommand,
69
+ error
70
+ });
71
+ throw error;
72
+ }
73
+ }
74
+ async function createFile(path, content) {
75
+ await mkdir(dirname(path), { recursive: true });
76
+ await writeFile(path, content);
77
+ }
78
+ const isNotExistsError = (e) => isObject(e) && "code" in e && e.code === "ENOENT";
79
+ const throwUnlessNotExists = throwIf(negate(isNotExistsError));
80
+ const isDirectoryEmpty = async (path) => {
81
+ try {
82
+ return (await readdir(path)).length === 0;
83
+ } catch (e) {
84
+ throwUnlessNotExists(e);
85
+ return true;
86
+ }
87
+ };
88
+ /**
89
+ * Converts a package manager to its corresponding runtime.
90
+ * @param pm - The package manager (deno, bun, npm, yarn, pnpm)
91
+ * @returns The runtime name (deno, bun, or node)
92
+ */
93
+ const packageManagerToRuntime = (pm) => pm === "deno" ? "deno" : pm === "bun" ? "bun" : "node";
94
+ const getNextInitCommand = (pm) => [
95
+ ...createNextAppCommand(pm),
96
+ ".",
97
+ "--yes"
98
+ ];
99
+ const createNextAppCommand = (pm) => pm === "deno" ? [
100
+ "deno",
101
+ "-Ar",
102
+ "npm:create-next-app@latest"
103
+ ] : pm === "bun" ? [
104
+ "bun",
105
+ "create",
106
+ "next-app"
107
+ ] : pm === "npm" ? ["npx", "create-next-app"] : [
108
+ pm,
109
+ "dlx",
110
+ "create-next-app"
111
+ ];
112
+ const getNitroInitCommand = (pm) => [
113
+ ...createNitroAppCommand(pm),
114
+ pm === "deno" ? "npm:giget@latest" : "giget@latest",
115
+ "nitro",
116
+ ".",
117
+ "&&",
118
+ "rm",
119
+ "nitro.config.ts"
120
+ ];
121
+ const createNitroAppCommand = (pm) => pm === "deno" ? [
122
+ "deno",
123
+ "run",
124
+ "-A"
125
+ ] : pm === "bun" ? ["bunx"] : pm === "npm" ? ["npx"] : [pm, "dlx"];
126
+ const isTest = ({ testMode }) => testMode;
127
+
128
+ //#endregion
129
+ export { PACKAGE_VERSION, createFile, getDevCommand, getInstallUrl, getInstruction, getNextInitCommand, getNitroInitCommand, isDirectoryEmpty, isPackageManagerAvailable, isTest, kvStores, logger, messageQueues, packageManagerToRuntime, packageManagers, readTemplate, runtimes, throwUnlessNotExists };
package/dist/mod.d.mts ADDED
@@ -0,0 +1,3 @@
1
+ import { initCommand, initOptions } from "./command.mjs";
2
+ import { runInit } from "./action/mod.mjs";
3
+ export { initCommand, initOptions, runInit };
package/dist/mod.mjs ADDED
@@ -0,0 +1,4 @@
1
+ import action_default from "./action/mod.mjs";
2
+ import { initCommand, initOptions } from "./command.mjs";
3
+
4
+ export { initCommand, initOptions, action_default as runInit };
@@ -0,0 +1,3 @@
1
+ import fedifyLint from "@fedify/lint";
2
+
3
+ export default fedifyLint;
@@ -0,0 +1,24 @@
1
+ import { createFederation } from "@fedify/fedify";
2
+ import { Person } from "@fedify/vocab";
3
+ import { getLogger } from "@logtape/logtape";
4
+ /* imports */
5
+
6
+ const logger = getLogger(/* logger */);
7
+
8
+ const federation = createFederation({
9
+ kv: /* kv */,
10
+ queue: /* queue */,
11
+ });
12
+
13
+ federation.setActorDispatcher(
14
+ "/users/{identifier}",
15
+ async (ctx, identifier) => {
16
+ return new Person({
17
+ id: ctx.getActorUri(identifier),
18
+ preferredUsername: identifier,
19
+ name: identifier,
20
+ });
21
+ },
22
+ );
23
+
24
+ export default federation;
@@ -0,0 +1,23 @@
1
+ import { configure, getConsoleSink } from "@logtape/logtape";
2
+ import { AsyncLocalStorage } from "node:async_hooks";
3
+
4
+ await configure({
5
+ contextLocalStorage: new AsyncLocalStorage(),
6
+ sinks: {
7
+ console: getConsoleSink(),
8
+ },
9
+ filters: {},
10
+ loggers: [
11
+ {
12
+ category: /* project name */,
13
+ lowestLevel: "debug",
14
+ sinks: ["console"],
15
+ },
16
+ { category: "fedify", lowestLevel: "info", sinks: ["console"] },
17
+ {
18
+ category: ["logtape", "meta"],
19
+ lowestLevel: "warning",
20
+ sinks: ["console"],
21
+ },
22
+ ],
23
+ });