@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.
- package/dist/index.d.mts +20 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +130 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +95 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +21 -0
- package/src/index.ts +132 -0
- package/tsconfig.json +22 -0
- package/tsup.config.ts +11 -0
package/dist/index.d.mts
ADDED
|
@@ -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.d.ts
ADDED
|
@@ -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
|
+
}
|