@stackwright-pro/scaffold-hooks 0.1.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.
@@ -0,0 +1,20 @@
1
+ import { ScaffoldHook } from '@stackwright/scaffold-core';
2
+
3
+ /**
4
+ * @stackwright-pro/scaffold-hooks
5
+ *
6
+ * Auto-registers Pro packages during Stackwright project scaffolding.
7
+ * Import createProScaffoldHooks() to get a function that registers the hooks
8
+ * with the caller's scaffold-core instance.
9
+ */
10
+
11
+ interface CreateScaffoldHooksOptions {
12
+ registerScaffoldHook: (hook: ScaffoldHook) => void;
13
+ }
14
+ /**
15
+ * Create and register all Pro scaffold hooks.
16
+ * Call this BEFORE calling scaffold() to ensure hooks run in the correct context.
17
+ */
18
+ declare function createProScaffoldHooks(options: CreateScaffoldHooksOptions): void;
19
+
20
+ export { createProScaffoldHooks };
@@ -0,0 +1,20 @@
1
+ import { ScaffoldHook } from '@stackwright/scaffold-core';
2
+
3
+ /**
4
+ * @stackwright-pro/scaffold-hooks
5
+ *
6
+ * Auto-registers Pro packages during Stackwright project scaffolding.
7
+ * Import createProScaffoldHooks() to get a function that registers the hooks
8
+ * with the caller's scaffold-core instance.
9
+ */
10
+
11
+ interface CreateScaffoldHooksOptions {
12
+ registerScaffoldHook: (hook: ScaffoldHook) => void;
13
+ }
14
+ /**
15
+ * Create and register all Pro scaffold hooks.
16
+ * Call this BEFORE calling scaffold() to ensure hooks run in the correct context.
17
+ */
18
+ declare function createProScaffoldHooks(options: CreateScaffoldHooksOptions): void;
19
+
20
+ export { createProScaffoldHooks };
package/dist/index.js ADDED
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ createProScaffoldHooks: () => createProScaffoldHooks
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+ var import_chalk = __toESM(require("chalk"));
37
+ var STACKWRIGHT_NPM_VERSIONS = {
38
+ "@stackwright/core": "^0.7.0",
39
+ "@stackwright/icons": "^0.3.0",
40
+ "@stackwright/nextjs": "^0.3.1",
41
+ "@stackwright/ui-shadcn": "^0.1.0",
42
+ "@stackwright/build-scripts": "^0.4.0",
43
+ "@stackwright/mcp": "^0.2.0",
44
+ "@stackwright/otters": "^0.2.0"
45
+ };
46
+ var PRO_DEPENDENCIES = {
47
+ "@stackwright-pro/scaffold-hooks": "latest",
48
+ "@stackwright-pro/mcp": "latest",
49
+ "@stackwright-pro/otters": "latest",
50
+ "@stackwright-pro/openapi": "latest",
51
+ "@stackwright-pro/auth": "latest",
52
+ "@stackwright-pro/auth-nextjs": "latest",
53
+ zod: "^3.23.0"
54
+ };
55
+ var PRO_DEV_DEPENDENCIES = {
56
+ "@stoplight/prism-cli": "^5.14.2"
57
+ };
58
+ function createProScaffoldHooks(options) {
59
+ const { registerScaffoldHook } = options;
60
+ registerScaffoldHook({
61
+ type: "preInstall",
62
+ name: "pro-dependencies",
63
+ priority: 10,
64
+ critical: false,
65
+ handler: async (ctx) => {
66
+ const packageJson = ctx.packageJson;
67
+ const dependencies = packageJson.dependencies || {};
68
+ const devDependencies = packageJson.devDependencies || {};
69
+ const scripts = packageJson.scripts || {};
70
+ for (const [pkgName, version] of Object.entries(STACKWRIGHT_NPM_VERSIONS)) {
71
+ if (dependencies[pkgName] === "workspace:*") {
72
+ dependencies[pkgName] = version;
73
+ }
74
+ if (devDependencies[pkgName] === "workspace:*") {
75
+ devDependencies[pkgName] = version;
76
+ }
77
+ }
78
+ dependencies["@stackwright/mcp"] = STACKWRIGHT_NPM_VERSIONS["@stackwright/mcp"];
79
+ dependencies["@stackwright-pro/mcp"] = "latest";
80
+ Object.assign(dependencies, PRO_DEPENDENCIES);
81
+ Object.assign(devDependencies, PRO_DEV_DEPENDENCIES);
82
+ Object.assign(scripts, {
83
+ "dev:admin": "MOCK_USER=admin next dev",
84
+ "dev:analyst": "MOCK_USER=analyst next dev",
85
+ "dev:viewer": "MOCK_USER=viewer next dev",
86
+ prebuild: "node scripts/prebuild.js",
87
+ predev: "node scripts/prebuild.js"
88
+ });
89
+ packageJson.dependencies = dependencies;
90
+ packageJson.devDependencies = devDependencies;
91
+ packageJson.scripts = scripts;
92
+ }
93
+ });
94
+ registerScaffoldHook({
95
+ type: "preInstall",
96
+ name: "pro-mcp-config",
97
+ priority: 20,
98
+ critical: false,
99
+ handler: async (ctx) => {
100
+ const codePuppyConfig = ctx.codePuppyConfig || {};
101
+ codePuppyConfig.mcp_servers = codePuppyConfig.mcp_servers || {};
102
+ codePuppyConfig.mcp_servers["stackwright-pro"] = {
103
+ command: "node",
104
+ args: ["node_modules/@stackwright-pro/mcp/dist/server.js"],
105
+ env: { NODE_ENV: "development" }
106
+ };
107
+ codePuppyConfig.agents_path = [
108
+ "node_modules/@stackwright/otters",
109
+ "node_modules/@stackwright-pro/otters"
110
+ ];
111
+ ctx.codePuppyConfig = codePuppyConfig;
112
+ console.log(import_chalk.default.green("\u2705 Pro MCP server configured"));
113
+ }
114
+ });
115
+ registerScaffoldHook({
116
+ type: "postInstall",
117
+ name: "verify-pro-installation",
118
+ priority: 50,
119
+ critical: false,
120
+ handler: async () => {
121
+ console.log(import_chalk.default.cyan("\u{1F9A6}\u{1F9A6} Pro packages ready!"));
122
+ }
123
+ });
124
+ console.log(import_chalk.default.bold.cyan("\u{1F9A6}\u{1F517} @stackwright-pro/scaffold-hooks registered"));
125
+ }
126
+ // Annotate the CommonJS export names for ESM import in node:
127
+ 0 && (module.exports = {
128
+ createProScaffoldHooks
129
+ });
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @stackwright-pro/scaffold-hooks\n *\n * Auto-registers Pro packages during Stackwright project scaffolding.\n * Import createProScaffoldHooks() to get a function that registers the hooks\n * with the caller's scaffold-core instance.\n */\n\nimport chalk from 'chalk';\nimport type { ScaffoldHook } from '@stackwright/scaffold-core';\n\n// Fixed npm versions for @stackwright/* packages\nconst STACKWRIGHT_NPM_VERSIONS: Record<string, string> = {\n '@stackwright/core': '^0.7.0',\n '@stackwright/icons': '^0.3.0',\n '@stackwright/nextjs': '^0.3.1',\n '@stackwright/ui-shadcn': '^0.1.0',\n '@stackwright/build-scripts': '^0.4.0',\n '@stackwright/mcp': '^0.2.0',\n '@stackwright/otters': '^0.2.0',\n};\n\nconst PRO_DEPENDENCIES: Record<string, string> = {\n '@stackwright-pro/scaffold-hooks': 'latest',\n '@stackwright-pro/mcp': 'latest',\n '@stackwright-pro/otters': 'latest',\n '@stackwright-pro/openapi': 'latest',\n '@stackwright-pro/auth': 'latest',\n '@stackwright-pro/auth-nextjs': 'latest',\n zod: '^3.23.0',\n};\n\nconst PRO_DEV_DEPENDENCIES: Record<string, string> = {\n '@stoplight/prism-cli': '^5.14.2',\n};\n\ninterface CreateScaffoldHooksOptions {\n registerScaffoldHook: (hook: ScaffoldHook) => void;\n}\n\n/**\n * Create and register all Pro scaffold hooks.\n * Call this BEFORE calling scaffold() to ensure hooks run in the correct context.\n */\nexport function createProScaffoldHooks(options: CreateScaffoldHooksOptions): void {\n const { registerScaffoldHook } = options;\n\n registerScaffoldHook({\n type: 'preInstall',\n name: 'pro-dependencies',\n priority: 10,\n critical: false,\n handler: async (ctx) => {\n const packageJson = ctx.packageJson as Record<string, unknown>;\n const dependencies = (packageJson.dependencies as Record<string, string>) || {};\n const devDependencies = (packageJson.devDependencies as Record<string, string>) || {};\n const scripts = (packageJson.scripts as Record<string, string>) || {};\n\n // Fix workspace:* references from scaffold\n for (const [pkgName, version] of Object.entries(STACKWRIGHT_NPM_VERSIONS)) {\n if (dependencies[pkgName] === 'workspace:*') {\n dependencies[pkgName] = version;\n }\n if (devDependencies[pkgName] === 'workspace:*') {\n devDependencies[pkgName] = version;\n }\n }\n\n // Add Pro MCP packages\n dependencies['@stackwright/mcp'] = STACKWRIGHT_NPM_VERSIONS['@stackwright/mcp'];\n dependencies['@stackwright-pro/mcp'] = 'latest';\n\n // Add Pro dependencies\n Object.assign(dependencies, PRO_DEPENDENCIES);\n Object.assign(devDependencies, PRO_DEV_DEPENDENCIES);\n\n // Add role-based dev scripts\n Object.assign(scripts, {\n 'dev:admin': 'MOCK_USER=admin next dev',\n 'dev:analyst': 'MOCK_USER=analyst next dev',\n 'dev:viewer': 'MOCK_USER=viewer next dev',\n prebuild: 'node scripts/prebuild.js',\n predev: 'node scripts/prebuild.js',\n });\n\n packageJson.dependencies = dependencies;\n packageJson.devDependencies = devDependencies;\n packageJson.scripts = scripts;\n },\n });\n\n registerScaffoldHook({\n type: 'preInstall',\n name: 'pro-mcp-config',\n priority: 20,\n critical: false,\n handler: async (ctx) => {\n const codePuppyConfig = (ctx.codePuppyConfig || {}) as Record<string, unknown>;\n\n // Ensure structure exists\n codePuppyConfig.mcp_servers = codePuppyConfig.mcp_servers || {};\n\n // Add Pro MCP server\n (codePuppyConfig.mcp_servers as Record<string, unknown>)['stackwright-pro'] = {\n command: 'node',\n args: ['node_modules/@stackwright-pro/mcp/dist/server.js'],\n env: { NODE_ENV: 'development' },\n };\n\n // Set agents_path to include both OSS and Pro otters\n codePuppyConfig.agents_path = [\n 'node_modules/@stackwright/otters',\n 'node_modules/@stackwright-pro/otters',\n ];\n\n ctx.codePuppyConfig = codePuppyConfig;\n console.log(chalk.green('✅ Pro MCP server configured'));\n },\n });\n\n registerScaffoldHook({\n type: 'postInstall',\n name: 'verify-pro-installation',\n priority: 50,\n critical: false,\n handler: async () => {\n console.log(chalk.cyan('🦦🦦 Pro packages ready!'));\n },\n });\n\n console.log(chalk.bold.cyan('🦦🔗 @stackwright-pro/scaffold-hooks registered'));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,mBAAkB;AAIlB,IAAM,2BAAmD;AAAA,EACvD,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,oBAAoB;AAAA,EACpB,uBAAuB;AACzB;AAEA,IAAM,mBAA2C;AAAA,EAC/C,mCAAmC;AAAA,EACnC,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,EAChC,KAAK;AACP;AAEA,IAAM,uBAA+C;AAAA,EACnD,wBAAwB;AAC1B;AAUO,SAAS,uBAAuB,SAA2C;AAChF,QAAM,EAAE,qBAAqB,IAAI;AAEjC,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,OAAO,QAAQ;AACtB,YAAM,cAAc,IAAI;AACxB,YAAM,eAAgB,YAAY,gBAA2C,CAAC;AAC9E,YAAM,kBAAmB,YAAY,mBAA8C,CAAC;AACpF,YAAM,UAAW,YAAY,WAAsC,CAAC;AAGpE,iBAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,wBAAwB,GAAG;AACzE,YAAI,aAAa,OAAO,MAAM,eAAe;AAC3C,uBAAa,OAAO,IAAI;AAAA,QAC1B;AACA,YAAI,gBAAgB,OAAO,MAAM,eAAe;AAC9C,0BAAgB,OAAO,IAAI;AAAA,QAC7B;AAAA,MACF;AAGA,mBAAa,kBAAkB,IAAI,yBAAyB,kBAAkB;AAC9E,mBAAa,sBAAsB,IAAI;AAGvC,aAAO,OAAO,cAAc,gBAAgB;AAC5C,aAAO,OAAO,iBAAiB,oBAAoB;AAGnD,aAAO,OAAO,SAAS;AAAA,QACrB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,cAAc;AAAA,QACd,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AAED,kBAAY,eAAe;AAC3B,kBAAY,kBAAkB;AAC9B,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,CAAC;AAED,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,OAAO,QAAQ;AACtB,YAAM,kBAAmB,IAAI,mBAAmB,CAAC;AAGjD,sBAAgB,cAAc,gBAAgB,eAAe,CAAC;AAG9D,MAAC,gBAAgB,YAAwC,iBAAiB,IAAI;AAAA,QAC5E,SAAS;AAAA,QACT,MAAM,CAAC,kDAAkD;AAAA,QACzD,KAAK,EAAE,UAAU,cAAc;AAAA,MACjC;AAGA,sBAAgB,cAAc;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAEA,UAAI,kBAAkB;AACtB,cAAQ,IAAI,aAAAA,QAAM,MAAM,kCAA6B,CAAC;AAAA,IACxD;AAAA,EACF,CAAC;AAED,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,YAAY;AACnB,cAAQ,IAAI,aAAAA,QAAM,KAAK,wCAA0B,CAAC;AAAA,IACpD;AAAA,EACF,CAAC;AAED,UAAQ,IAAI,aAAAA,QAAM,KAAK,KAAK,+DAAiD,CAAC;AAChF;","names":["chalk"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,95 @@
1
+ // src/index.ts
2
+ import chalk from "chalk";
3
+ var STACKWRIGHT_NPM_VERSIONS = {
4
+ "@stackwright/core": "^0.7.0",
5
+ "@stackwright/icons": "^0.3.0",
6
+ "@stackwright/nextjs": "^0.3.1",
7
+ "@stackwright/ui-shadcn": "^0.1.0",
8
+ "@stackwright/build-scripts": "^0.4.0",
9
+ "@stackwright/mcp": "^0.2.0",
10
+ "@stackwright/otters": "^0.2.0"
11
+ };
12
+ var PRO_DEPENDENCIES = {
13
+ "@stackwright-pro/scaffold-hooks": "latest",
14
+ "@stackwright-pro/mcp": "latest",
15
+ "@stackwright-pro/otters": "latest",
16
+ "@stackwright-pro/openapi": "latest",
17
+ "@stackwright-pro/auth": "latest",
18
+ "@stackwright-pro/auth-nextjs": "latest",
19
+ zod: "^3.23.0"
20
+ };
21
+ var PRO_DEV_DEPENDENCIES = {
22
+ "@stoplight/prism-cli": "^5.14.2"
23
+ };
24
+ function createProScaffoldHooks(options) {
25
+ const { registerScaffoldHook } = options;
26
+ registerScaffoldHook({
27
+ type: "preInstall",
28
+ name: "pro-dependencies",
29
+ priority: 10,
30
+ critical: false,
31
+ handler: async (ctx) => {
32
+ const packageJson = ctx.packageJson;
33
+ const dependencies = packageJson.dependencies || {};
34
+ const devDependencies = packageJson.devDependencies || {};
35
+ const scripts = packageJson.scripts || {};
36
+ for (const [pkgName, version] of Object.entries(STACKWRIGHT_NPM_VERSIONS)) {
37
+ if (dependencies[pkgName] === "workspace:*") {
38
+ dependencies[pkgName] = version;
39
+ }
40
+ if (devDependencies[pkgName] === "workspace:*") {
41
+ devDependencies[pkgName] = version;
42
+ }
43
+ }
44
+ dependencies["@stackwright/mcp"] = STACKWRIGHT_NPM_VERSIONS["@stackwright/mcp"];
45
+ dependencies["@stackwright-pro/mcp"] = "latest";
46
+ Object.assign(dependencies, PRO_DEPENDENCIES);
47
+ Object.assign(devDependencies, PRO_DEV_DEPENDENCIES);
48
+ Object.assign(scripts, {
49
+ "dev:admin": "MOCK_USER=admin next dev",
50
+ "dev:analyst": "MOCK_USER=analyst next dev",
51
+ "dev:viewer": "MOCK_USER=viewer next dev",
52
+ prebuild: "node scripts/prebuild.js",
53
+ predev: "node scripts/prebuild.js"
54
+ });
55
+ packageJson.dependencies = dependencies;
56
+ packageJson.devDependencies = devDependencies;
57
+ packageJson.scripts = scripts;
58
+ }
59
+ });
60
+ registerScaffoldHook({
61
+ type: "preInstall",
62
+ name: "pro-mcp-config",
63
+ priority: 20,
64
+ critical: false,
65
+ handler: async (ctx) => {
66
+ const codePuppyConfig = ctx.codePuppyConfig || {};
67
+ codePuppyConfig.mcp_servers = codePuppyConfig.mcp_servers || {};
68
+ codePuppyConfig.mcp_servers["stackwright-pro"] = {
69
+ command: "node",
70
+ args: ["node_modules/@stackwright-pro/mcp/dist/server.js"],
71
+ env: { NODE_ENV: "development" }
72
+ };
73
+ codePuppyConfig.agents_path = [
74
+ "node_modules/@stackwright/otters",
75
+ "node_modules/@stackwright-pro/otters"
76
+ ];
77
+ ctx.codePuppyConfig = codePuppyConfig;
78
+ console.log(chalk.green("\u2705 Pro MCP server configured"));
79
+ }
80
+ });
81
+ registerScaffoldHook({
82
+ type: "postInstall",
83
+ name: "verify-pro-installation",
84
+ priority: 50,
85
+ critical: false,
86
+ handler: async () => {
87
+ console.log(chalk.cyan("\u{1F9A6}\u{1F9A6} Pro packages ready!"));
88
+ }
89
+ });
90
+ console.log(chalk.bold.cyan("\u{1F9A6}\u{1F517} @stackwright-pro/scaffold-hooks registered"));
91
+ }
92
+ export {
93
+ createProScaffoldHooks
94
+ };
95
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @stackwright-pro/scaffold-hooks\n *\n * Auto-registers Pro packages during Stackwright project scaffolding.\n * Import createProScaffoldHooks() to get a function that registers the hooks\n * with the caller's scaffold-core instance.\n */\n\nimport chalk from 'chalk';\nimport type { ScaffoldHook } from '@stackwright/scaffold-core';\n\n// Fixed npm versions for @stackwright/* packages\nconst STACKWRIGHT_NPM_VERSIONS: Record<string, string> = {\n '@stackwright/core': '^0.7.0',\n '@stackwright/icons': '^0.3.0',\n '@stackwright/nextjs': '^0.3.1',\n '@stackwright/ui-shadcn': '^0.1.0',\n '@stackwright/build-scripts': '^0.4.0',\n '@stackwright/mcp': '^0.2.0',\n '@stackwright/otters': '^0.2.0',\n};\n\nconst PRO_DEPENDENCIES: Record<string, string> = {\n '@stackwright-pro/scaffold-hooks': 'latest',\n '@stackwright-pro/mcp': 'latest',\n '@stackwright-pro/otters': 'latest',\n '@stackwright-pro/openapi': 'latest',\n '@stackwright-pro/auth': 'latest',\n '@stackwright-pro/auth-nextjs': 'latest',\n zod: '^3.23.0',\n};\n\nconst PRO_DEV_DEPENDENCIES: Record<string, string> = {\n '@stoplight/prism-cli': '^5.14.2',\n};\n\ninterface CreateScaffoldHooksOptions {\n registerScaffoldHook: (hook: ScaffoldHook) => void;\n}\n\n/**\n * Create and register all Pro scaffold hooks.\n * Call this BEFORE calling scaffold() to ensure hooks run in the correct context.\n */\nexport function createProScaffoldHooks(options: CreateScaffoldHooksOptions): void {\n const { registerScaffoldHook } = options;\n\n registerScaffoldHook({\n type: 'preInstall',\n name: 'pro-dependencies',\n priority: 10,\n critical: false,\n handler: async (ctx) => {\n const packageJson = ctx.packageJson as Record<string, unknown>;\n const dependencies = (packageJson.dependencies as Record<string, string>) || {};\n const devDependencies = (packageJson.devDependencies as Record<string, string>) || {};\n const scripts = (packageJson.scripts as Record<string, string>) || {};\n\n // Fix workspace:* references from scaffold\n for (const [pkgName, version] of Object.entries(STACKWRIGHT_NPM_VERSIONS)) {\n if (dependencies[pkgName] === 'workspace:*') {\n dependencies[pkgName] = version;\n }\n if (devDependencies[pkgName] === 'workspace:*') {\n devDependencies[pkgName] = version;\n }\n }\n\n // Add Pro MCP packages\n dependencies['@stackwright/mcp'] = STACKWRIGHT_NPM_VERSIONS['@stackwright/mcp'];\n dependencies['@stackwright-pro/mcp'] = 'latest';\n\n // Add Pro dependencies\n Object.assign(dependencies, PRO_DEPENDENCIES);\n Object.assign(devDependencies, PRO_DEV_DEPENDENCIES);\n\n // Add role-based dev scripts\n Object.assign(scripts, {\n 'dev:admin': 'MOCK_USER=admin next dev',\n 'dev:analyst': 'MOCK_USER=analyst next dev',\n 'dev:viewer': 'MOCK_USER=viewer next dev',\n prebuild: 'node scripts/prebuild.js',\n predev: 'node scripts/prebuild.js',\n });\n\n packageJson.dependencies = dependencies;\n packageJson.devDependencies = devDependencies;\n packageJson.scripts = scripts;\n },\n });\n\n registerScaffoldHook({\n type: 'preInstall',\n name: 'pro-mcp-config',\n priority: 20,\n critical: false,\n handler: async (ctx) => {\n const codePuppyConfig = (ctx.codePuppyConfig || {}) as Record<string, unknown>;\n\n // Ensure structure exists\n codePuppyConfig.mcp_servers = codePuppyConfig.mcp_servers || {};\n\n // Add Pro MCP server\n (codePuppyConfig.mcp_servers as Record<string, unknown>)['stackwright-pro'] = {\n command: 'node',\n args: ['node_modules/@stackwright-pro/mcp/dist/server.js'],\n env: { NODE_ENV: 'development' },\n };\n\n // Set agents_path to include both OSS and Pro otters\n codePuppyConfig.agents_path = [\n 'node_modules/@stackwright/otters',\n 'node_modules/@stackwright-pro/otters',\n ];\n\n ctx.codePuppyConfig = codePuppyConfig;\n console.log(chalk.green('✅ Pro MCP server configured'));\n },\n });\n\n registerScaffoldHook({\n type: 'postInstall',\n name: 'verify-pro-installation',\n priority: 50,\n critical: false,\n handler: async () => {\n console.log(chalk.cyan('🦦🦦 Pro packages ready!'));\n },\n });\n\n console.log(chalk.bold.cyan('🦦🔗 @stackwright-pro/scaffold-hooks registered'));\n}\n"],"mappings":";AAQA,OAAO,WAAW;AAIlB,IAAM,2BAAmD;AAAA,EACvD,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,EAC9B,oBAAoB;AAAA,EACpB,uBAAuB;AACzB;AAEA,IAAM,mBAA2C;AAAA,EAC/C,mCAAmC;AAAA,EACnC,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,EAChC,KAAK;AACP;AAEA,IAAM,uBAA+C;AAAA,EACnD,wBAAwB;AAC1B;AAUO,SAAS,uBAAuB,SAA2C;AAChF,QAAM,EAAE,qBAAqB,IAAI;AAEjC,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,OAAO,QAAQ;AACtB,YAAM,cAAc,IAAI;AACxB,YAAM,eAAgB,YAAY,gBAA2C,CAAC;AAC9E,YAAM,kBAAmB,YAAY,mBAA8C,CAAC;AACpF,YAAM,UAAW,YAAY,WAAsC,CAAC;AAGpE,iBAAW,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,wBAAwB,GAAG;AACzE,YAAI,aAAa,OAAO,MAAM,eAAe;AAC3C,uBAAa,OAAO,IAAI;AAAA,QAC1B;AACA,YAAI,gBAAgB,OAAO,MAAM,eAAe;AAC9C,0BAAgB,OAAO,IAAI;AAAA,QAC7B;AAAA,MACF;AAGA,mBAAa,kBAAkB,IAAI,yBAAyB,kBAAkB;AAC9E,mBAAa,sBAAsB,IAAI;AAGvC,aAAO,OAAO,cAAc,gBAAgB;AAC5C,aAAO,OAAO,iBAAiB,oBAAoB;AAGnD,aAAO,OAAO,SAAS;AAAA,QACrB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,cAAc;AAAA,QACd,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AAED,kBAAY,eAAe;AAC3B,kBAAY,kBAAkB;AAC9B,kBAAY,UAAU;AAAA,IACxB;AAAA,EACF,CAAC;AAED,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,OAAO,QAAQ;AACtB,YAAM,kBAAmB,IAAI,mBAAmB,CAAC;AAGjD,sBAAgB,cAAc,gBAAgB,eAAe,CAAC;AAG9D,MAAC,gBAAgB,YAAwC,iBAAiB,IAAI;AAAA,QAC5E,SAAS;AAAA,QACT,MAAM,CAAC,kDAAkD;AAAA,QACzD,KAAK,EAAE,UAAU,cAAc;AAAA,MACjC;AAGA,sBAAgB,cAAc;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAEA,UAAI,kBAAkB;AACtB,cAAQ,IAAI,MAAM,MAAM,kCAA6B,CAAC;AAAA,IACxD;AAAA,EACF,CAAC;AAED,uBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS,YAAY;AACnB,cAAQ,IAAI,MAAM,KAAK,wCAA0B,CAAC;AAAA,IACpD;AAAA,EACF,CAAC;AAED,UAAQ,IAAI,MAAM,KAAK,KAAK,+DAAiD,CAAC;AAChF;","names":[]}
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@stackwright-pro/scaffold-hooks",
3
+ "version": "0.1.0",
4
+ "description": "Scaffold hooks for Stackwright Pro - auto-registers Pro packages during project scaffolding",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "dependencies": {
8
+ "@stackwright/scaffold-core": "^0.1.0-alpha.0",
9
+ "chalk": "^4.1.2"
10
+ },
11
+ "devDependencies": {
12
+ "tsup": "^8.0.0",
13
+ "typescript": "^5.3.0"
14
+ },
15
+ "peerDependencies": {
16
+ "@stackwright/cli": "^0.7.0"
17
+ },
18
+ "scripts": {
19
+ "build": "tsup"
20
+ }
21
+ }
package/src/index.ts ADDED
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @stackwright-pro/scaffold-hooks
3
+ *
4
+ * Auto-registers Pro packages during Stackwright project scaffolding.
5
+ * Import createProScaffoldHooks() to get a function that registers the hooks
6
+ * with the caller's scaffold-core instance.
7
+ */
8
+
9
+ import chalk from 'chalk';
10
+ import type { ScaffoldHook } from '@stackwright/scaffold-core';
11
+
12
+ // Fixed npm versions for @stackwright/* packages
13
+ const STACKWRIGHT_NPM_VERSIONS: Record<string, string> = {
14
+ '@stackwright/core': '^0.7.0',
15
+ '@stackwright/icons': '^0.3.0',
16
+ '@stackwright/nextjs': '^0.3.1',
17
+ '@stackwright/ui-shadcn': '^0.1.0',
18
+ '@stackwright/build-scripts': '^0.4.0',
19
+ '@stackwright/mcp': '^0.2.0',
20
+ '@stackwright/otters': '^0.2.0',
21
+ };
22
+
23
+ const PRO_DEPENDENCIES: Record<string, string> = {
24
+ '@stackwright-pro/scaffold-hooks': 'latest',
25
+ '@stackwright-pro/mcp': 'latest',
26
+ '@stackwright-pro/otters': 'latest',
27
+ '@stackwright-pro/openapi': 'latest',
28
+ '@stackwright-pro/auth': 'latest',
29
+ '@stackwright-pro/auth-nextjs': 'latest',
30
+ zod: '^3.23.0',
31
+ };
32
+
33
+ const PRO_DEV_DEPENDENCIES: Record<string, string> = {
34
+ '@stoplight/prism-cli': '^5.14.2',
35
+ };
36
+
37
+ interface CreateScaffoldHooksOptions {
38
+ registerScaffoldHook: (hook: ScaffoldHook) => void;
39
+ }
40
+
41
+ /**
42
+ * Create and register all Pro scaffold hooks.
43
+ * Call this BEFORE calling scaffold() to ensure hooks run in the correct context.
44
+ */
45
+ export function createProScaffoldHooks(options: CreateScaffoldHooksOptions): void {
46
+ const { registerScaffoldHook } = options;
47
+
48
+ registerScaffoldHook({
49
+ type: 'preInstall',
50
+ name: 'pro-dependencies',
51
+ priority: 10,
52
+ critical: false,
53
+ handler: async (ctx) => {
54
+ const packageJson = ctx.packageJson as Record<string, unknown>;
55
+ const dependencies = (packageJson.dependencies as Record<string, string>) || {};
56
+ const devDependencies = (packageJson.devDependencies as Record<string, string>) || {};
57
+ const scripts = (packageJson.scripts as Record<string, string>) || {};
58
+
59
+ // Fix workspace:* references from scaffold
60
+ for (const [pkgName, version] of Object.entries(STACKWRIGHT_NPM_VERSIONS)) {
61
+ if (dependencies[pkgName] === 'workspace:*') {
62
+ dependencies[pkgName] = version;
63
+ }
64
+ if (devDependencies[pkgName] === 'workspace:*') {
65
+ devDependencies[pkgName] = version;
66
+ }
67
+ }
68
+
69
+ // Add Pro MCP packages
70
+ dependencies['@stackwright/mcp'] = STACKWRIGHT_NPM_VERSIONS['@stackwright/mcp'];
71
+ dependencies['@stackwright-pro/mcp'] = 'latest';
72
+
73
+ // Add Pro dependencies
74
+ Object.assign(dependencies, PRO_DEPENDENCIES);
75
+ Object.assign(devDependencies, PRO_DEV_DEPENDENCIES);
76
+
77
+ // Add role-based dev scripts
78
+ Object.assign(scripts, {
79
+ 'dev:admin': 'MOCK_USER=admin next dev',
80
+ 'dev:analyst': 'MOCK_USER=analyst next dev',
81
+ 'dev:viewer': 'MOCK_USER=viewer next dev',
82
+ prebuild: 'node scripts/prebuild.js',
83
+ predev: 'node scripts/prebuild.js',
84
+ });
85
+
86
+ packageJson.dependencies = dependencies;
87
+ packageJson.devDependencies = devDependencies;
88
+ packageJson.scripts = scripts;
89
+ },
90
+ });
91
+
92
+ registerScaffoldHook({
93
+ type: 'preInstall',
94
+ name: 'pro-mcp-config',
95
+ priority: 20,
96
+ critical: false,
97
+ handler: async (ctx) => {
98
+ const codePuppyConfig = (ctx.codePuppyConfig || {}) as Record<string, unknown>;
99
+
100
+ // Ensure structure exists
101
+ codePuppyConfig.mcp_servers = codePuppyConfig.mcp_servers || {};
102
+
103
+ // Add Pro MCP server
104
+ (codePuppyConfig.mcp_servers as Record<string, unknown>)['stackwright-pro'] = {
105
+ command: 'node',
106
+ args: ['node_modules/@stackwright-pro/mcp/dist/server.js'],
107
+ env: { NODE_ENV: 'development' },
108
+ };
109
+
110
+ // Set agents_path to include both OSS and Pro otters
111
+ codePuppyConfig.agents_path = [
112
+ 'node_modules/@stackwright/otters',
113
+ 'node_modules/@stackwright-pro/otters',
114
+ ];
115
+
116
+ ctx.codePuppyConfig = codePuppyConfig;
117
+ console.log(chalk.green('✅ Pro MCP server configured'));
118
+ },
119
+ });
120
+
121
+ registerScaffoldHook({
122
+ type: 'postInstall',
123
+ name: 'verify-pro-installation',
124
+ priority: 50,
125
+ critical: false,
126
+ handler: async () => {
127
+ console.log(chalk.cyan('🦦🦦 Pro packages ready!'));
128
+ },
129
+ });
130
+
131
+ console.log(chalk.bold.cyan('🦦🔗 @stackwright-pro/scaffold-hooks registered'));
132
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "lib": ["ES2022", "DOM"],
6
+ "jsx": "react-jsx",
7
+ "declaration": true,
8
+ "declarationMap": true,
9
+ "sourceMap": true,
10
+ "outDir": "./dist",
11
+ "rootDir": "./src",
12
+ "strict": true,
13
+ "esModuleInterop": true,
14
+ "skipLibCheck": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "resolveJsonModule": true,
17
+ "moduleResolution": "bundler",
18
+ "allowSyntheticDefaultImports": true
19
+ },
20
+ "include": ["src/**/*"],
21
+ "exclude": ["node_modules", "dist"]
22
+ }
package/tsup.config.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { defineConfig } from 'tsup';
2
+
3
+ export default defineConfig({
4
+ entry: ['src/index.ts'],
5
+ format: ['esm', 'cjs'],
6
+ dts: {
7
+ entry: ['src/index.ts'],
8
+ },
9
+ sourcemap: true,
10
+ clean: true,
11
+ });