@sharpee/devkit 1.0.4 → 1.0.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sharpee/devkit",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "The Sharpee CLI engine — build/test/verify/scaffold orchestration (ADR-180). Provides the `sharpee` command; orchestrates, tsf compiles.",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -8,7 +8,7 @@
8
8
  "sharpee": "./cli.js"
9
9
  },
10
10
  "dependencies": {
11
- "@sharpee/bootstrap": "^1.0.1",
11
+ "@sharpee/bootstrap": "^1.0.2",
12
12
  "@sharpee/core": "^1.0.0",
13
13
  "@sharpee/transcript-tester": "^1.0.0",
14
14
  "fflate": "^0.8.2"
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * CLI: sharpee build-browser
3
3
  *
4
- * Bundles a Sharpee story for web browser deployment.
5
- */
6
- /**
7
- * Run the build-browser command
4
+ * Bundles a Sharpee story for the browser into dist/web/. The bundle (game.js)
5
+ * is esbuilt from src/browser-entry.ts; the HTML page and platform CSS
6
+ * (base/decorations/styles + theme fonts) are owned by the platform and copied
7
+ * fresh from devkit's bundled template every build. The author's only CSS
8
+ * surface is browser/<story-id>.css, loaded last so it wins the cascade.
8
9
  */
10
+ /** Run the build-browser command. */
9
11
  export declare function runBuildBrowserCommand(args: string[], projectDirArg?: string): Promise<void>;
10
12
  //# sourceMappingURL=build-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-browser.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/devkit/src/standalone/build-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwDH;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgHlG"}
1
+ {"version":3,"file":"build-browser.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/devkit/src/standalone/build-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgGH,qCAAqC;AACrC,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGlG"}
@@ -2,7 +2,11 @@
2
2
  /**
3
3
  * CLI: sharpee build-browser
4
4
  *
5
- * Bundles a Sharpee story for web browser deployment.
5
+ * Bundles a Sharpee story for the browser into dist/web/. The bundle (game.js)
6
+ * is esbuilt from src/browser-entry.ts; the HTML page and platform CSS
7
+ * (base/decorations/styles + theme fonts) are owned by the platform and copied
8
+ * fresh from devkit's bundled template every build. The author's only CSS
9
+ * surface is browser/<story-id>.css, loaded last so it wins the cascade.
6
10
  */
7
11
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
12
  if (k2 === undefined) k2 = k;
@@ -42,11 +46,13 @@ exports.runBuildBrowserCommand = runBuildBrowserCommand;
42
46
  const fs = __importStar(require("fs"));
43
47
  const path = __importStar(require("path"));
44
48
  const child_process_1 = require("child_process");
45
- /**
46
- * Read story info from package.json or index.ts
47
- */
49
+ const init_1 = require("./init");
50
+ // In source: standalone/ ../../templates. In npm publish: standalone/ → ../templates.
51
+ const TEMPLATES_DIR = fs.existsSync(path.join(__dirname, '..', 'templates', 'browser'))
52
+ ? path.join(__dirname, '..', 'templates', 'browser')
53
+ : path.join(__dirname, '..', '..', 'templates', 'browser');
54
+ /** Read story id/title from package.json, falling back to src/index.ts. */
48
55
  function getProjectInfo(projectDir) {
49
- // Try package.json first
50
56
  const packagePath = path.join(projectDir, 'package.json');
51
57
  if (fs.existsSync(packagePath)) {
52
58
  try {
@@ -57,10 +63,9 @@ function getProjectInfo(projectDir) {
57
63
  };
58
64
  }
59
65
  catch {
60
- // Fall through
66
+ // Fall through to index.ts.
61
67
  }
62
68
  }
63
- // Try reading from src/index.ts
64
69
  const indexPath = path.join(projectDir, 'src', 'index.ts');
65
70
  if (fs.existsSync(indexPath)) {
66
71
  const content = fs.readFileSync(indexPath, 'utf-8');
@@ -75,19 +80,53 @@ function getProjectInfo(projectDir) {
75
80
  }
76
81
  return null;
77
82
  }
78
- /**
79
- * Process template placeholders
80
- */
83
+ /** Substitute the story tokens index.html carries (the override stylesheet link). */
81
84
  function processTemplate(content, info) {
82
85
  return content
83
86
  .replace(/\{\{STORY_ID\}\}/g, info.storyId)
84
87
  .replace(/\{\{STORY_TITLE\}\}/g, info.storyTitle);
85
88
  }
86
89
  /**
87
- * Run the build-browser command
90
+ * Generate src/version.ts (the author-project analog of the monorepo version
91
+ * stamp). browser-entry.ts imports STORY_VERSION/ENGINE_VERSION/BUILD_DATE from
92
+ * it; an author project never gets one from the platform build, so we write it
93
+ * fresh each browser build. The file is marked auto-generated.
88
94
  */
95
+ function stampVersion(projectDir, info) {
96
+ let storyVersion = '1.0.0';
97
+ try {
98
+ const pkg = JSON.parse(fs.readFileSync(path.join(projectDir, 'package.json'), 'utf-8'));
99
+ if (pkg.version)
100
+ storyVersion = pkg.version;
101
+ }
102
+ catch {
103
+ // Keep the default.
104
+ }
105
+ const engineVersion = (0, init_1.platformRanges)().sharpeeRange.replace(/^[\^~]/, '');
106
+ const buildDate = new Date().toISOString().replace(/\.\d+Z$/, 'Z');
107
+ fs.mkdirSync(path.join(projectDir, 'src'), { recursive: true });
108
+ fs.writeFileSync(path.join(projectDir, 'src', 'version.ts'), `/**
109
+ * Version information for ${info.storyId}
110
+ * Auto-generated by sharpee build-browser - DO NOT EDIT
111
+ */
112
+ export const STORY_VERSION = '${storyVersion}';
113
+ export const BUILD_DATE = '${buildDate}';
114
+ export const ENGINE_VERSION = '${engineVersion}';
115
+ export const VERSION_INFO = { version: STORY_VERSION, buildDate: BUILD_DATE, engineVersion: ENGINE_VERSION } as const;
116
+ `);
117
+ }
118
+ /** Copy a platform asset from devkit's template into the output, warning if absent. */
119
+ function copyPlatformAsset(name, outDir) {
120
+ const src = path.join(TEMPLATES_DIR, name);
121
+ if (fs.existsSync(src)) {
122
+ fs.cpSync(src, path.join(outDir, name), { recursive: true });
123
+ }
124
+ else {
125
+ console.warn(` ⚠ Template asset not found: ${name}`);
126
+ }
127
+ }
128
+ /** Run the build-browser command. */
89
129
  async function runBuildBrowserCommand(args, projectDirArg) {
90
- // Check for help
91
130
  if (args.includes('--help') || args.includes('-h')) {
92
131
  showHelp();
93
132
  return;
@@ -96,7 +135,6 @@ async function runBuildBrowserCommand(args, projectDirArg) {
96
135
  const minify = !args.includes('--no-minify');
97
136
  const sourcemap = !args.includes('--no-sourcemap');
98
137
  console.log('\n🔨 Building browser bundle\n');
99
- // Check if this is a Sharpee project
100
138
  const info = getProjectInfo(projectDir);
101
139
  if (!info) {
102
140
  console.error('Error: This does not appear to be a Sharpee project.');
@@ -104,82 +142,75 @@ async function runBuildBrowserCommand(args, projectDirArg) {
104
142
  process.exit(1);
105
143
  }
106
144
  console.log(` Story: ${info.storyTitle} (${info.storyId})`);
107
- // Check for browser-entry.ts
108
145
  const browserEntryPath = path.join(projectDir, 'src', 'browser-entry.ts');
109
146
  if (!fs.existsSync(browserEntryPath)) {
110
147
  console.error('\nError: src/browser-entry.ts not found.');
111
148
  console.error('Run "sharpee init-browser" first to add browser support.');
112
149
  process.exit(1);
113
150
  }
114
- // Create output directory
115
151
  const outDir = path.join(projectDir, 'dist', 'web');
116
152
  fs.mkdirSync(outDir, { recursive: true });
117
- // Build with esbuild
118
- console.log(' Building...');
153
+ // browser-entry.ts imports ./version — stamp it fresh before bundling.
154
+ stampVersion(projectDir, info);
155
+ // Bundle browser-entry.ts → dist/web/game.js. The <script src="game.js"> in
156
+ // index.html depends on this exact name. esbuild runs with cwd=projectDir so it
157
+ // resolves @sharpee/* from the project's node_modules; --conditions=require picks
158
+ // the CJS branch of the platform packages' exports maps (matches the monorepo build).
159
+ console.log(' Bundling game.js...');
119
160
  const esbuildArgs = [
161
+ 'esbuild',
120
162
  browserEntryPath,
121
163
  '--bundle',
122
164
  '--platform=browser',
123
165
  '--target=es2020',
124
166
  '--format=iife',
125
- `--global-name=SharpeeGame`,
126
- `--outfile=${path.join(outDir, info.storyId + '.js')}`,
127
- '--define:process.env.NODE_ENV=\\"production\\"',
128
- '--define:process.env.PARSER_DEBUG=\\"false\\"',
129
- '--define:process.env.DEBUG_PRONOUNS=\\"\\"',
167
+ '--global-name=SharpeeGame',
168
+ `--outfile=${path.join(outDir, 'game.js')}`,
169
+ '--conditions=require',
170
+ '--define:process.env.NODE_ENV="production"',
171
+ '--define:process.env.PARSER_DEBUG=undefined',
172
+ '--define:process.env.DEBUG_PRONOUNS=undefined',
130
173
  ];
131
- if (minify) {
174
+ if (minify)
132
175
  esbuildArgs.push('--minify');
133
- }
134
- if (sourcemap) {
176
+ if (sourcemap)
135
177
  esbuildArgs.push('--sourcemap');
136
- }
137
178
  try {
138
- (0, child_process_1.execSync)(`npx esbuild ${esbuildArgs.join(' ')}`, {
139
- cwd: projectDir,
140
- stdio: 'pipe',
141
- });
142
- console.log(` ✓ Built ${info.storyId}.js`);
179
+ (0, child_process_1.execFileSync)('npx', esbuildArgs, { cwd: projectDir, stdio: 'pipe' });
180
+ console.log(' ✓ Built game.js');
143
181
  }
144
182
  catch (error) {
145
183
  console.error(' ✗ Build failed');
146
- if (error.stderr) {
184
+ if (error.stderr)
147
185
  console.error(error.stderr.toString());
148
- }
149
186
  process.exit(1);
150
187
  }
151
- // Copy HTML template
152
- const browserHtmlPath = path.join(projectDir, 'browser', 'index.html');
153
- const defaultHtmlPath = path.join(__dirname, '..', '..', 'templates', 'browser', 'index.html');
154
- const htmlSource = fs.existsSync(browserHtmlPath) ? browserHtmlPath : defaultHtmlPath;
155
- if (fs.existsSync(htmlSource)) {
156
- let htmlContent = fs.readFileSync(htmlSource, 'utf-8');
157
- htmlContent = processTemplate(htmlContent, info);
158
- fs.writeFileSync(path.join(outDir, 'index.html'), htmlContent);
159
- console.log(' ✓ Copied index.html');
160
- }
161
- else {
162
- console.warn(' ⚠ HTML template not found');
188
+ // Platform-owned page + CSS + theme fonts: always copied fresh from devkit.
189
+ let html = fs.readFileSync(path.join(TEMPLATES_DIR, 'index.html'), 'utf-8');
190
+ fs.writeFileSync(path.join(outDir, 'index.html'), processTemplate(html, info));
191
+ console.log(' ✓ Copied index.html');
192
+ for (const asset of ['base.css', 'decorations.css', 'styles.css', 'themes']) {
193
+ copyPlatformAsset(asset, outDir);
163
194
  }
164
- // Copy CSS
165
- const browserCssPath = path.join(projectDir, 'browser', 'styles.css');
166
- const defaultCssPath = path.join(__dirname, '..', '..', 'templates', 'browser', 'styles.css');
167
- const cssSource = fs.existsSync(browserCssPath) ? browserCssPath : defaultCssPath;
168
- if (fs.existsSync(cssSource)) {
169
- fs.copyFileSync(cssSource, path.join(outDir, 'styles.css'));
170
- console.log(' ✓ Copied styles.css');
195
+ console.log(' ✓ Copied platform CSS + themes');
196
+ // Author override stylesheet → dist/web/<story-id>.css. index.html links it last,
197
+ // so write an empty stub when the author hasn't added one (avoids a 404).
198
+ const overrideCss = path.join(projectDir, 'browser', `${info.storyId}.css`);
199
+ const overrideOut = path.join(outDir, `${info.storyId}.css`);
200
+ if (fs.existsSync(overrideCss)) {
201
+ fs.copyFileSync(overrideCss, overrideOut);
202
+ console.log(` ✓ Copied ${info.storyId}.css`);
171
203
  }
172
204
  else {
173
- console.warn(' ⚠ CSS file not found');
205
+ fs.writeFileSync(overrideOut, `/* ${info.storyTitle} author overrides (none yet) */\n`);
174
206
  }
175
- // Report bundle size
176
- const bundlePath = path.join(outDir, info.storyId + '.js');
177
- if (fs.existsSync(bundlePath)) {
178
- const stats = fs.statSync(bundlePath);
179
- const sizeKb = (stats.size / 1024).toFixed(1);
180
- console.log(`\n Bundle size: ${sizeKb} KB`);
207
+ const bundlePath = path.join(outDir, 'game.js');
208
+ if (!fs.existsSync(bundlePath) || fs.statSync(bundlePath).size === 0) {
209
+ console.error('\nError: dist/web/game.js is missing or empty after build.');
210
+ process.exit(1);
181
211
  }
182
- console.log('\n✅ Build complete!\n');
212
+ const sizeKb = (fs.statSync(bundlePath).size / 1024).toFixed(1);
213
+ console.log(`\n✅ Build complete! (game.js ${sizeKb} KB)\n`);
183
214
  console.log(`Output: ${path.relative(projectDir, outDir)}/`);
184
215
  console.log('');
185
216
  console.log('To test locally:');
@@ -196,13 +227,11 @@ Options:
196
227
  --no-minify Skip minification
197
228
  --no-sourcemap Skip source map generation
198
229
 
199
- Output:
200
- dist/web/
201
- index.html HTML page
202
- <story-id>.js JavaScript bundle
203
- styles.css Stylesheet
204
-
205
- The bundle includes your story, the Sharpee engine, and all dependencies.
230
+ Output (dist/web/):
231
+ game.js Story + engine + browser client (one bundle)
232
+ index.html The page (platform-owned)
233
+ base.css, decorations.css, styles.css, themes/ Platform CSS
234
+ <story-id>.css Your overrides (from browser/<story-id>.css)
206
235
  `);
207
236
  }
208
237
  //# sourceMappingURL=build-browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-browser.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/devkit/src/standalone/build-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-browser.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/devkit/src/standalone/build-browser.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * CLI: sharpee init-browser
3
3
  *
4
- * Adds browser client files to an existing Sharpee story project.
4
+ * Adds a browser client to an existing Sharpee story project: the entry-point
5
+ * wiring (src/browser-entry.ts), an author override stylesheet
6
+ * (browser/<story-id>.css), the runtime dependencies the entry point imports,
7
+ * and a build:browser script. The HTML and platform CSS are owned by the
8
+ * platform and supplied at build time by `sharpee build-browser` — never seeded.
5
9
  */
6
- /**
7
- * Run the init-browser command
8
- */
9
- export declare function runInitBrowserCommand(args: string[]): Promise<void>;
10
+ /** Run the init-browser command. */
11
+ export declare function runInitBrowserCommand(args: string[], projectDirArg?: string): Promise<void>;
10
12
  //# sourceMappingURL=init-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-browser.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/devkit/src/standalone/init-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6DH;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgGzE"}
1
+ {"version":3,"file":"init-browser.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/devkit/src/standalone/init-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgGH,oCAAoC;AACpC,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DjG"}
@@ -2,7 +2,11 @@
2
2
  /**
3
3
  * CLI: sharpee init-browser
4
4
  *
5
- * Adds browser client files to an existing Sharpee story project.
5
+ * Adds a browser client to an existing Sharpee story project: the entry-point
6
+ * wiring (src/browser-entry.ts), an author override stylesheet
7
+ * (browser/<story-id>.css), the runtime dependencies the entry point imports,
8
+ * and a build:browser script. The HTML and platform CSS are owned by the
9
+ * platform and supplied at build time by `sharpee build-browser` — never seeded.
6
10
  */
7
11
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
12
  if (k2 === undefined) k2 = k;
@@ -41,15 +45,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
41
45
  exports.runInitBrowserCommand = runInitBrowserCommand;
42
46
  const fs = __importStar(require("fs"));
43
47
  const path = __importStar(require("path"));
44
- // In source: src/cli/ → ../../templates. In npm publish: cli/ → ../templates.
48
+ const init_1 = require("./init");
49
+ // In source: standalone/ → ../../templates. In npm publish: standalone/ → ../templates.
45
50
  const TEMPLATES_DIR = fs.existsSync(path.join(__dirname, '..', 'templates', 'browser'))
46
51
  ? path.join(__dirname, '..', 'templates', 'browser')
47
52
  : path.join(__dirname, '..', '..', 'templates', 'browser');
48
- /**
49
- * Read story info from package.json or index.ts
50
- */
53
+ /** Runtime packages browser-entry.ts imports that aren't already scaffold deps. */
54
+ const BROWSER_RUNTIME_DEPS = [
55
+ '@sharpee/engine',
56
+ '@sharpee/parser-en-us',
57
+ '@sharpee/lang-en-us',
58
+ '@sharpee/stdlib',
59
+ '@sharpee/platform-browser',
60
+ ];
61
+ /** Read story id/title from package.json, falling back to src/index.ts. */
51
62
  function getProjectInfo(projectDir) {
52
- // Try package.json first
53
63
  const packagePath = path.join(projectDir, 'package.json');
54
64
  if (fs.existsSync(packagePath)) {
55
65
  try {
@@ -60,10 +70,9 @@ function getProjectInfo(projectDir) {
60
70
  };
61
71
  }
62
72
  catch {
63
- // Fall through
73
+ // Fall through to index.ts.
64
74
  }
65
75
  }
66
- // Try reading from src/index.ts
67
76
  const indexPath = path.join(projectDir, 'src', 'index.ts');
68
77
  if (fs.existsSync(indexPath)) {
69
78
  const content = fs.readFileSync(indexPath, 'utf-8');
@@ -78,27 +87,52 @@ function getProjectInfo(projectDir) {
78
87
  }
79
88
  return null;
80
89
  }
81
- /**
82
- * Read template file and replace placeholders
83
- */
84
- function processTemplate(templatePath, info) {
85
- const content = fs.readFileSync(templatePath, 'utf-8');
90
+ /** Substitute the story tokens a browser template file may carry. */
91
+ function processTemplate(content, info) {
86
92
  return content
87
93
  .replace(/\{\{STORY_ID\}\}/g, info.storyId)
88
94
  .replace(/\{\{STORY_TITLE\}\}/g, info.storyTitle);
89
95
  }
90
96
  /**
91
- * Run the init-browser command
97
+ * Add browser runtime deps + a build:browser script to the project's package.json.
98
+ * Deps pin to the platform major line this devkit shipped with (same source as
99
+ * `sharpee init`). Existing entries are left untouched.
92
100
  */
93
- async function runInitBrowserCommand(args) {
94
- // Check for help
101
+ function updatePackageJson(projectDir) {
102
+ const packagePath = path.join(projectDir, 'package.json');
103
+ if (!fs.existsSync(packagePath)) {
104
+ console.warn(' ⚠ No package.json — skipped dependency wiring');
105
+ return;
106
+ }
107
+ try {
108
+ const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
109
+ const { sharpeeRange } = (0, init_1.platformRanges)();
110
+ pkg.dependencies = pkg.dependencies || {};
111
+ for (const dep of BROWSER_RUNTIME_DEPS) {
112
+ if (!pkg.dependencies[dep])
113
+ pkg.dependencies[dep] = sharpeeRange;
114
+ }
115
+ pkg.devDependencies = pkg.devDependencies || {};
116
+ if (!pkg.devDependencies.esbuild)
117
+ pkg.devDependencies.esbuild = '^0.20.0';
118
+ pkg.scripts = pkg.scripts || {};
119
+ if (!pkg.scripts['build:browser'])
120
+ pkg.scripts['build:browser'] = 'sharpee build-browser';
121
+ fs.writeFileSync(packagePath, JSON.stringify(pkg, null, 2) + '\n');
122
+ console.log(' ✓ Updated package.json (deps + build:browser)');
123
+ }
124
+ catch {
125
+ console.warn(' ⚠ Could not update package.json');
126
+ }
127
+ }
128
+ /** Run the init-browser command. */
129
+ async function runInitBrowserCommand(args, projectDirArg) {
95
130
  if (args.includes('--help') || args.includes('-h')) {
96
131
  showHelp();
97
132
  return;
98
133
  }
99
- const projectDir = process.cwd();
134
+ const projectDir = projectDirArg || process.cwd();
100
135
  console.log('\n🌐 Adding browser client to your Sharpee project\n');
101
- // Check if this is a Sharpee project
102
136
  const info = getProjectInfo(projectDir);
103
137
  if (!info) {
104
138
  console.error('Error: This does not appear to be a Sharpee project.');
@@ -107,86 +141,57 @@ async function runInitBrowserCommand(args) {
107
141
  process.exit(1);
108
142
  }
109
143
  console.log(` Story: ${info.storyTitle} (${info.storyId})`);
110
- // Check if browser-entry.ts already exists
144
+ // Entry point the one wiring file authors may customize.
111
145
  const browserEntryPath = path.join(projectDir, 'src', 'browser-entry.ts');
112
146
  if (fs.existsSync(browserEntryPath)) {
113
147
  console.error('\nError: src/browser-entry.ts already exists.');
114
148
  console.error('Remove it first if you want to regenerate.');
115
149
  process.exit(1);
116
150
  }
117
- // Create browser directory for templates (optional, for customization)
118
- const browserDir = path.join(projectDir, 'browser');
119
- fs.mkdirSync(browserDir, { recursive: true });
120
- // Copy browser-entry.ts template
121
151
  const browserEntryTemplate = path.join(TEMPLATES_DIR, 'browser-entry.ts.template');
122
- if (fs.existsSync(browserEntryTemplate)) {
123
- const content = processTemplate(browserEntryTemplate, info);
124
- fs.writeFileSync(browserEntryPath, content);
125
- console.log(' ✓ Created src/browser-entry.ts');
126
- }
127
- else {
152
+ if (!fs.existsSync(browserEntryTemplate)) {
128
153
  console.error(' ✗ Template not found: browser-entry.ts.template');
129
154
  process.exit(1);
130
155
  }
131
- // Copy HTML template
132
- const htmlTemplate = path.join(TEMPLATES_DIR, 'index.html');
133
- if (fs.existsSync(htmlTemplate)) {
134
- const content = processTemplate(htmlTemplate, info);
135
- fs.writeFileSync(path.join(browserDir, 'index.html'), content);
136
- console.log(' ✓ Created browser/index.html');
137
- }
138
- // Copy CSS
139
- const cssTemplate = path.join(TEMPLATES_DIR, 'styles.css');
140
- if (fs.existsSync(cssTemplate)) {
141
- fs.copyFileSync(cssTemplate, path.join(browserDir, 'styles.css'));
142
- console.log(' ✓ Created browser/styles.css');
143
- }
144
- // Update package.json to add esbuild dev dependency and build script
145
- const packagePath = path.join(projectDir, 'package.json');
146
- if (fs.existsSync(packagePath)) {
147
- try {
148
- const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
149
- // Add esbuild to devDependencies
150
- pkg.devDependencies = pkg.devDependencies || {};
151
- if (!pkg.devDependencies.esbuild) {
152
- pkg.devDependencies.esbuild = '^0.20.0';
153
- }
154
- // Add build:browser script
155
- pkg.scripts = pkg.scripts || {};
156
- if (!pkg.scripts['build:browser']) {
157
- pkg.scripts['build:browser'] = 'sharpee build-browser';
158
- }
159
- fs.writeFileSync(packagePath, JSON.stringify(pkg, null, 2) + '\n');
160
- console.log(' ✓ Updated package.json');
161
- }
162
- catch (e) {
163
- console.warn(' ⚠ Could not update package.json');
164
- }
156
+ fs.writeFileSync(browserEntryPath, processTemplate(fs.readFileSync(browserEntryTemplate, 'utf-8'), info));
157
+ console.log(' ✓ Created src/browser-entry.ts');
158
+ // Author override stylesheet — the sole CSS customization surface. The platform
159
+ // CSS (base/decorations/styles) and index.html are pulled fresh from devkit at build.
160
+ const browserDir = path.join(projectDir, 'browser');
161
+ fs.mkdirSync(browserDir, { recursive: true });
162
+ const overrideCssPath = path.join(browserDir, `${info.storyId}.css`);
163
+ if (!fs.existsSync(overrideCssPath)) {
164
+ fs.writeFileSync(overrideCssPath, `/* ${info.storyTitle} — author stylesheet.\n` +
165
+ ` * Loaded after the platform CSS, so any rule here overrides the defaults.\n` +
166
+ ` * Add your own styles below. */\n`);
167
+ console.log(` ✓ Created browser/${info.storyId}.css`);
165
168
  }
169
+ updatePackageJson(projectDir);
166
170
  console.log('\n✅ Browser client added!\n');
167
171
  console.log('Next steps:');
168
- console.log(' npm install # Install esbuild');
169
- console.log(' npm run build:browser # Build web bundle');
170
- console.log('');
171
- console.log('Output will be in dist/web/');
172
+ console.log(' npm install # Install the browser runtime deps');
173
+ console.log(' npm run build # Build the story');
174
+ console.log(' npm run build:browser # Build the web bundle → dist/web/');
172
175
  console.log('');
173
- console.log('Customize the UI:');
174
- console.log(' browser/index.html # HTML template');
175
- console.log(' browser/styles.css # Styles');
176
+ console.log('Customize:');
177
+ console.log(' src/browser-entry.ts # Engine + client wiring');
178
+ console.log(` browser/${info.storyId}.css # Your style overrides`);
176
179
  console.log('');
177
180
  }
178
181
  function showHelp() {
179
182
  console.log(`
180
- sharpee init-browser - Add browser client to a Sharpee project
183
+ sharpee init-browser - Add a browser client to a Sharpee project
181
184
 
182
185
  Usage: sharpee init-browser
183
186
 
184
- This command adds the files needed to build a web browser version
185
- of your interactive fiction game:
187
+ Adds the files needed to build a web version of your story:
188
+
189
+ src/browser-entry.ts Engine + browser-client wiring
190
+ browser/<story-id>.css Author style overrides (loaded last)
186
191
 
187
- src/browser-entry.ts Entry point for browser bundle
188
- browser/index.html HTML template
189
- browser/styles.css Infocom-style CSS
192
+ Also adds the browser runtime dependencies and a build:browser script to
193
+ package.json. The HTML page and platform CSS are supplied at build time by
194
+ "sharpee build-browser".
190
195
 
191
196
  Run this in the root of your Sharpee project directory.
192
197
  `);
@@ -1 +1 @@
1
- {"version":3,"file":"init-browser.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/devkit/src/standalone/init-browser.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEH,sDAgGC;AA9JD,uCAAyB;AACzB,2CAA6B;AAE7B,8EAA8E;AAC9E,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC;IACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAO7D;;GAEG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,yBAAyB;IACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,UAAU;gBAC/B,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,IAAI,UAAU;aACtD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAE9D,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU;gBACnC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU;aAC1C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,YAAoB,EAAE,IAAiB;IAC9D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO;SACX,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC;SAC1C,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,QAAQ,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IAEpE,qCAAqC;IACrC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC1E,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uEAAuE;IACvE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;IACnF,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,eAAe,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAC5D,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACpD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,WAAW;IACX,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,qEAAqE;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAE9D,iCAAiC;YACjC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBACjC,GAAG,CAAC,eAAe,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1C,CAAC;YAED,2BAA2B;YAC3B,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,uBAAuB,CAAC;YACzD,CAAC;YAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAab,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init-browser.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/devkit/src/standalone/init-browser.ts"],"names":[],"mappings":"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"}