@stacksjs/buddy 0.70.148 → 0.70.150

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.
@@ -29,53 +29,25 @@ export function extension(buddy) {
29
29
  log.success(`Built ${config.name} ${v} for ${(config.targets ?? ["chrome", "firefox"]).join(", ")}`);
30
30
  }
31
31
  });
32
- buddy.command("extension:init", "Scaffold a browser extension (config/extension.ts + starter background/content/pages)").option("--name <name>", "Extension display name").action(async (options) => {
33
- const { existsSync } = await import("node:fs"), { mkdir, writeFile } = await import("node:fs/promises"), { dirname, join } = await import("node:path"), cwd = process.cwd(), name = options.name ?? "My Extension", write = async (rel, content) => {
34
- const abs = join(cwd, rel);
35
- if (existsSync(abs)) {
36
- log.info(`skip (exists): ${rel}`);
37
- return;
38
- }
39
- await mkdir(dirname(abs), { recursive: !0 });
40
- await writeFile(abs, content);
41
- log.success(`created ${rel}`);
42
- };
43
- await write("config/extension.ts", `import { defineExtension } from '@stacksjs/browser-extension'
44
-
45
- export default defineExtension({
46
- name: ${JSON.stringify(name)},
47
- description: 'A browser extension built with Stacks.',
48
- targets: ['chrome', 'firefox'],
49
- background: 'src/background/index.ts',
50
- content: [
51
- { entry: 'src/content/index.ts', matches: ['<all_urls>'], runAt: 'document_start' },
52
- ],
53
- pages: {
54
- popup: { template: 'pages/popup.stx', script: 'src/ui/popup.ts' },
55
- },
56
- icons: { 16: 'icons/icon-16.png', 48: 'icons/icon-48.png', 128: 'icons/icon-128.png' },
57
- public: 'public',
58
- manifest: {
59
- permissions: ['storage', 'tabs'],
60
- },
61
- })
62
- `);
63
- await write("src/background/index.ts", `// Background service worker (MV3).
64
- console.log('[${name}] background ready')
65
- `);
66
- await write("src/content/index.ts", `// Content script \u2014 runs on matched pages.
67
- console.log('[${name}] content script loaded')
68
- `);
69
- await write("src/ui/popup.ts", `// Popup script.
70
- console.log('[${name}] popup')
71
- `);
72
- await write("pages/popup.stx", `<div class="popup">
73
- <h1>${name}</h1>
74
- <p>Edit pages/popup.stx to build your popup.</p>
75
- <script src="/popup.js"></script>
76
- </div>
77
- `);
78
- log.info("Next: add icons under public/icons, then `buddy extension:build`.");
32
+ buddy.command("extension:init", "Scaffold a Chrome, Firefox, or Safari extension, including the Safari Xcode app").option("--name <name>", "Extension display name").option("--target <target>", "Scaffold chrome, firefox, safari, or all (default all)").option("--bundle-id <id>", "Safari container bundle identifier").option("--team-id <id>", "Apple Developer team used for Safari signing").option("--platform <platform>", "Safari platform: macos, ios, or all (default all)").option("--force", "Overwrite existing starter and Safari scaffold files").action(async (options) => {
33
+ const target = options.target ?? "all";
34
+ if (!["chrome", "firefox", "safari", "all"].includes(target))
35
+ throw Error(`Invalid extension target ${target}; use chrome, firefox, safari, or all`);
36
+ const { scaffoldExtensionProject } = await import("@stacksjs/browser-extension"), result = await scaffoldExtensionProject({
37
+ name: options.name,
38
+ target,
39
+ bundleId: options.bundleId,
40
+ teamId: options.teamId,
41
+ platforms: parseSafariPlatforms(options.platform) ?? ["macos", "ios"],
42
+ force: Boolean(options.force)
43
+ });
44
+ for (const file of result.written)
45
+ log.success(`created ${file}`);
46
+ for (const file of result.skipped)
47
+ log.info(`skip (exists): ${file}`);
48
+ if (result.safari)
49
+ log.success(`Scaffolded the Safari container app \u2192 ${result.safari.dir}`);
50
+ log.info("Next: add icons under public/icons, then run `buddy extension:build`.");
79
51
  });
80
52
  buddy.command("extension:package", "Build + zip the browser extension into store-ready archives").option("--target <target>", "Package a single target (chrome | firefox | safari); omit to package all").option("--version <version>", "Override the extension version (defaults to package.json)").action(async (options) => {
81
53
  const { packageExtension } = await import("@stacksjs/browser-extension"), { config, version } = await load(), v = options.version ?? version, targets = options.target ? [options.target] : config.targets ?? ["chrome", "firefox"];
@@ -53,7 +53,7 @@ export function serve(buddy) {
53
53
  } catch {}
54
54
  if (!stxServe)
55
55
  ({ serve: stxServe } = await import("bun-plugin-stx/serve"));
56
- const stxModule = await resolveVendoredStxModule(), { site: siteConfig, i18n: i18nConfig } = await loadStxSiteConfig(), userViewsPath = "resources/views", defaultsResources = resolveDefaultsResources(), defaultViewsPath = join(defaultsResources, "views"), userLayoutsPath = existsSync("resources/views/layouts") ? "resources/views/layouts" : "resources/layouts", userComponentsPath = existsSync("resources/views/components") ? "resources/views/components" : "resources/components", apiBase = process.env.API_URL || `http://127.0.0.1:${Number(process.env.PORT_API) || config.ports?.api || 3008}`;
56
+ const stxModule = await resolveVendoredStxModule(), { site: siteConfig, i18n: i18nConfig } = await loadStxSiteConfig(), userViewsPath = "resources/views", defaultsResources = resolveDefaultsResources(), defaultViewsPath = join(defaultsResources, "views"), userLayoutsPath = existsSync("resources/views/layouts") ? "resources/views/layouts" : "resources/layouts", userPartialsPath = existsSync("resources/partials") ? "resources/partials" : existsSync("resources/views/partials") ? "resources/views/partials" : existsSync("partials") ? "partials" : "resources/partials", apiBase = process.env.API_URL || `http://127.0.0.1:${Number(process.env.PORT_API) || config.ports?.api || 3008}`;
57
57
  log.info(`Starting production server on port ${port}...`);
58
58
  await stxServe({
59
59
  patterns: [userViewsPath, defaultViewsPath],
@@ -62,7 +62,7 @@ export function serve(buddy) {
62
62
  reusePort: ["production", "staging", "development"].includes((process.env.APP_ENV || "").toLowerCase()),
63
63
  componentsDir: join(defaultsResources, "components"),
64
64
  layoutsDir: userLayoutsPath,
65
- partialsDir: userComponentsPath,
65
+ partialsDir: userPartialsPath,
66
66
  fallbackLayoutsDir: join(defaultsResources, "layouts"),
67
67
  fallbackPartialsDir: defaultViewsPath,
68
68
  quiet: options?.verbose !== !0,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@stacksjs/buddy",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "0.70.148",
5
+ "version": "0.70.150",
6
6
  "description": "Meet Buddy. The Stacks runtime.",
7
7
  "author": "Chris Breuer",
8
8
  "contributors": [
@@ -92,51 +92,51 @@
92
92
  "prepublishOnly": "bun run build"
93
93
  },
94
94
  "dependencies": {
95
- "@stacksjs/actions": "^0.70.148",
96
- "@stacksjs/ai": "^0.70.148",
97
- "@stacksjs/alias": "^0.70.148",
98
- "@stacksjs/arrays": "^0.70.148",
99
- "@stacksjs/auth": "^0.70.148",
100
- "@stacksjs/build": "^0.70.148",
101
- "@stacksjs/cache": "^0.70.148",
102
- "@stacksjs/cli": "^0.70.148",
95
+ "@stacksjs/actions": "^0.70.150",
96
+ "@stacksjs/ai": "^0.70.150",
97
+ "@stacksjs/alias": "^0.70.150",
98
+ "@stacksjs/arrays": "^0.70.150",
99
+ "@stacksjs/auth": "^0.70.150",
100
+ "@stacksjs/build": "^0.70.150",
101
+ "@stacksjs/cache": "^0.70.150",
102
+ "@stacksjs/cli": "^0.70.150",
103
103
  "@stacksjs/clapp": "^0.2.10",
104
- "@stacksjs/cloud": "^0.70.148",
105
- "@stacksjs/collections": "^0.70.148",
106
- "@stacksjs/config": "^0.70.148",
107
- "@stacksjs/database": "^0.70.148",
108
- "@stacksjs/desktop": "^0.70.148",
109
- "@stacksjs/dns": "^0.70.148",
110
- "@stacksjs/email": "^0.70.148",
111
- "@stacksjs/enums": "^0.70.148",
112
- "@stacksjs/error-handling": "^0.70.148",
113
- "@stacksjs/events": "^0.70.148",
114
- "@stacksjs/git": "^0.70.148",
104
+ "@stacksjs/cloud": "^0.70.150",
105
+ "@stacksjs/collections": "^0.70.150",
106
+ "@stacksjs/config": "^0.70.150",
107
+ "@stacksjs/database": "^0.70.150",
108
+ "@stacksjs/desktop": "^0.70.150",
109
+ "@stacksjs/dns": "^0.70.150",
110
+ "@stacksjs/email": "^0.70.150",
111
+ "@stacksjs/enums": "^0.70.150",
112
+ "@stacksjs/error-handling": "^0.70.150",
113
+ "@stacksjs/events": "^0.70.150",
114
+ "@stacksjs/git": "^0.70.150",
115
115
  "@stacksjs/gitit": "^0.2.5",
116
- "@stacksjs/health": "^0.70.148",
116
+ "@stacksjs/health": "^0.70.150",
117
117
  "@stacksjs/dnsx": "^0.2.3",
118
118
  "@stacksjs/httx": "^0.1.10",
119
- "@stacksjs/lint": "^0.70.148",
120
- "@stacksjs/logging": "^0.70.148",
121
- "@stacksjs/notifications": "^0.70.148",
122
- "@stacksjs/objects": "^0.70.148",
123
- "@stacksjs/orm": "^0.70.148",
124
- "@stacksjs/path": "^0.70.148",
125
- "@stacksjs/payments": "^0.70.148",
126
- "@stacksjs/realtime": "^0.70.148",
127
- "@stacksjs/router": "^0.70.148",
119
+ "@stacksjs/lint": "^0.70.150",
120
+ "@stacksjs/logging": "^0.70.150",
121
+ "@stacksjs/notifications": "^0.70.150",
122
+ "@stacksjs/objects": "^0.70.150",
123
+ "@stacksjs/orm": "^0.70.150",
124
+ "@stacksjs/path": "^0.70.150",
125
+ "@stacksjs/payments": "^0.70.150",
126
+ "@stacksjs/realtime": "^0.70.150",
127
+ "@stacksjs/router": "^0.70.150",
128
128
  "@stacksjs/rpx": "^0.11.29",
129
- "@stacksjs/search-engine": "^0.70.148",
130
- "@stacksjs/security": "^0.70.148",
131
- "@stacksjs/server": "^0.70.148",
132
- "@stacksjs/storage": "^0.70.148",
133
- "@stacksjs/strings": "^0.70.148",
134
- "@stacksjs/testing": "^0.70.148",
135
- "@stacksjs/tunnel": "^0.70.148",
136
- "@stacksjs/types": "^0.70.148",
137
- "@stacksjs/ui": "^0.70.148",
138
- "@stacksjs/utils": "^0.70.148",
139
- "@stacksjs/validation": "^0.70.148",
129
+ "@stacksjs/search-engine": "^0.70.150",
130
+ "@stacksjs/security": "^0.70.150",
131
+ "@stacksjs/server": "^0.70.150",
132
+ "@stacksjs/storage": "^0.70.150",
133
+ "@stacksjs/strings": "^0.70.150",
134
+ "@stacksjs/testing": "^0.70.150",
135
+ "@stacksjs/tunnel": "^0.70.150",
136
+ "@stacksjs/types": "^0.70.150",
137
+ "@stacksjs/ui": "^0.70.150",
138
+ "@stacksjs/utils": "^0.70.150",
139
+ "@stacksjs/validation": "^0.70.150",
140
140
  "@stacksjs/ts-cloud": "^0.7.47"
141
141
  },
142
142
  "devDependencies": {