@lark-base-open/base-database-cli 1.3.9 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +119 -15
  3. package/THIRD_PARTY_LICENSES.json +1662 -0
  4. package/config-schema.json +64 -3
  5. package/data/template-hmr-scripts.json +9 -0
  6. package/data/template-index-html/17e698eef687ece8f1628e3e2c4801da5e7233faa87076b3424acde8df57b825.html +24 -0
  7. package/dist/agent-tools-guide.d.ts +29 -0
  8. package/dist/agent-tools-guide.d.ts.map +1 -0
  9. package/dist/agent-tools-guide.js +169 -0
  10. package/dist/agent-tools-guide.js.map +1 -0
  11. package/dist/agent-tools-skill.d.ts +16 -0
  12. package/dist/agent-tools-skill.d.ts.map +1 -0
  13. package/dist/agent-tools-skill.js +183 -0
  14. package/dist/agent-tools-skill.js.map +1 -0
  15. package/dist/agent-tools.d.ts +20 -0
  16. package/dist/agent-tools.d.ts.map +1 -0
  17. package/dist/agent-tools.js +137 -0
  18. package/dist/agent-tools.js.map +1 -0
  19. package/dist/ai-functions.d.ts +10 -0
  20. package/dist/ai-functions.d.ts.map +1 -1
  21. package/dist/ai-functions.js +264 -212
  22. package/dist/ai-functions.js.map +1 -1
  23. package/dist/app-builder/core.d.mts +37 -0
  24. package/dist/app-builder/core.d.mts.map +1 -0
  25. package/dist/app-builder/core.mjs +673 -0
  26. package/dist/app-builder/core.mjs.map +1 -0
  27. package/dist/app-builder/package.json +1 -0
  28. package/dist/app-builder/schema.d.ts +4 -0
  29. package/dist/app-builder/schema.d.ts.map +1 -0
  30. package/dist/app-builder/schema.js +72 -0
  31. package/dist/app-builder/schema.js.map +1 -0
  32. package/dist/archive.d.ts +22 -2
  33. package/dist/archive.d.ts.map +1 -1
  34. package/dist/archive.js +311 -74
  35. package/dist/archive.js.map +1 -1
  36. package/dist/auth.d.ts +2 -2
  37. package/dist/auth.d.ts.map +1 -1
  38. package/dist/auth.js +13 -8
  39. package/dist/auth.js.map +1 -1
  40. package/dist/build-server.d.ts +25 -0
  41. package/dist/build-server.d.ts.map +1 -0
  42. package/dist/build-server.js +32 -0
  43. package/dist/build-server.js.map +1 -0
  44. package/dist/business-update-notice.d.ts +37 -0
  45. package/dist/business-update-notice.d.ts.map +1 -0
  46. package/dist/business-update-notice.js +24 -0
  47. package/dist/business-update-notice.js.map +1 -0
  48. package/dist/check.d.ts +11 -0
  49. package/dist/check.d.ts.map +1 -1
  50. package/dist/check.js +85 -15
  51. package/dist/check.js.map +1 -1
  52. package/dist/cloud-build-diagnostic.d.ts +9 -0
  53. package/dist/cloud-build-diagnostic.d.ts.map +1 -0
  54. package/dist/cloud-build-diagnostic.js +65 -0
  55. package/dist/cloud-build-diagnostic.js.map +1 -0
  56. package/dist/config.d.ts +6 -0
  57. package/dist/config.d.ts.map +1 -1
  58. package/dist/config.js +41 -11
  59. package/dist/config.js.map +1 -1
  60. package/dist/contract-extractor.d.ts +21 -0
  61. package/dist/contract-extractor.d.ts.map +1 -0
  62. package/dist/contract-extractor.js +260 -0
  63. package/dist/contract-extractor.js.map +1 -0
  64. package/dist/contract-worker.d.ts +12 -0
  65. package/dist/contract-worker.d.ts.map +1 -0
  66. package/dist/contract-worker.js +90 -0
  67. package/dist/contract-worker.js.map +1 -0
  68. package/dist/dependency-policy.d.ts.map +1 -1
  69. package/dist/dependency-policy.js +6 -1
  70. package/dist/dependency-policy.js.map +1 -1
  71. package/dist/deploy.d.ts +20 -1
  72. package/dist/deploy.d.ts.map +1 -1
  73. package/dist/deploy.js +181 -52
  74. package/dist/deploy.js.map +1 -1
  75. package/dist/dev-bootstrap.d.ts +5 -0
  76. package/dist/dev-bootstrap.d.ts.map +1 -0
  77. package/dist/dev-bootstrap.js +185 -0
  78. package/dist/dev-bootstrap.js.map +1 -0
  79. package/dist/dev-events.d.ts +24 -0
  80. package/dist/dev-events.d.ts.map +1 -0
  81. package/dist/dev-events.js +67 -0
  82. package/dist/dev-events.js.map +1 -0
  83. package/dist/dev-pairing.d.ts +4 -0
  84. package/dist/dev-pairing.d.ts.map +1 -0
  85. package/dist/dev-pairing.js +54 -0
  86. package/dist/dev-pairing.js.map +1 -0
  87. package/dist/dev-url.d.ts +4 -0
  88. package/dist/dev-url.d.ts.map +1 -0
  89. package/dist/dev-url.js +29 -0
  90. package/dist/dev-url.js.map +1 -0
  91. package/dist/dev-vite.d.ts +9 -0
  92. package/dist/dev-vite.d.ts.map +1 -0
  93. package/dist/dev-vite.js +237 -0
  94. package/dist/dev-vite.js.map +1 -0
  95. package/dist/dev-watch.d.ts +33 -0
  96. package/dist/dev-watch.d.ts.map +1 -0
  97. package/dist/dev-watch.js +246 -0
  98. package/dist/dev-watch.js.map +1 -0
  99. package/dist/dev.d.ts +24 -0
  100. package/dist/dev.d.ts.map +1 -0
  101. package/dist/dev.js +244 -0
  102. package/dist/dev.js.map +1 -0
  103. package/dist/development-pairing.generated.d.ts +12 -0
  104. package/dist/development-pairing.generated.d.ts.map +1 -0
  105. package/dist/development-pairing.generated.js +13 -0
  106. package/dist/development-pairing.generated.js.map +1 -0
  107. package/dist/diagnostic-platforms.d.ts +3 -0
  108. package/dist/diagnostic-platforms.d.ts.map +1 -0
  109. package/dist/diagnostic-platforms.js +3 -0
  110. package/dist/diagnostic-platforms.js.map +1 -0
  111. package/dist/diagnostic-schema.d.ts +151 -0
  112. package/dist/diagnostic-schema.d.ts.map +1 -0
  113. package/dist/diagnostic-schema.js +129 -0
  114. package/dist/diagnostic-schema.js.map +1 -0
  115. package/dist/diagnostics.d.ts +78 -0
  116. package/dist/diagnostics.d.ts.map +1 -0
  117. package/dist/diagnostics.js +333 -0
  118. package/dist/diagnostics.js.map +1 -0
  119. package/dist/distribution-commands.d.ts.map +1 -1
  120. package/dist/distribution-commands.js +6 -2
  121. package/dist/distribution-commands.js.map +1 -1
  122. package/dist/distribution-npm.d.ts +2 -2
  123. package/dist/distribution-npm.d.ts.map +1 -1
  124. package/dist/distribution-npm.js +14 -1
  125. package/dist/distribution-npm.js.map +1 -1
  126. package/dist/environment-variables.d.ts.map +1 -1
  127. package/dist/environment-variables.js +2 -1
  128. package/dist/environment-variables.js.map +1 -1
  129. package/dist/function-contracts.d.ts +40 -0
  130. package/dist/function-contracts.d.ts.map +1 -0
  131. package/dist/function-contracts.js +357 -0
  132. package/dist/function-contracts.js.map +1 -0
  133. package/dist/function-description.d.ts +11 -4
  134. package/dist/function-description.d.ts.map +1 -1
  135. package/dist/function-description.js +22 -12
  136. package/dist/function-description.js.map +1 -1
  137. package/dist/function-input-types.d.ts +6 -4
  138. package/dist/function-input-types.d.ts.map +1 -1
  139. package/dist/function-input-types.js +97 -135
  140. package/dist/function-input-types.js.map +1 -1
  141. package/dist/function-params.d.ts +53 -0
  142. package/dist/function-params.d.ts.map +1 -0
  143. package/dist/function-params.js +184 -0
  144. package/dist/function-params.js.map +1 -0
  145. package/dist/function-schema.d.ts +14 -0
  146. package/dist/function-schema.d.ts.map +1 -1
  147. package/dist/function-schema.js +99 -9
  148. package/dist/function-schema.js.map +1 -1
  149. package/dist/init-journal.d.ts +1 -0
  150. package/dist/init-journal.d.ts.map +1 -1
  151. package/dist/init-journal.js +21 -7
  152. package/dist/init-journal.js.map +1 -1
  153. package/dist/init.d.ts +1 -0
  154. package/dist/init.d.ts.map +1 -1
  155. package/dist/init.js +55 -5
  156. package/dist/init.js.map +1 -1
  157. package/dist/lark-cli-error.d.ts +13 -2
  158. package/dist/lark-cli-error.d.ts.map +1 -1
  159. package/dist/lark-cli-error.js +54 -13
  160. package/dist/lark-cli-error.js.map +1 -1
  161. package/dist/lark-cli-passthrough.d.ts +9 -0
  162. package/dist/lark-cli-passthrough.d.ts.map +1 -0
  163. package/dist/lark-cli-passthrough.js +101 -0
  164. package/dist/lark-cli-passthrough.js.map +1 -0
  165. package/dist/lark-cli.d.ts +5 -2
  166. package/dist/lark-cli.d.ts.map +1 -1
  167. package/dist/lark-cli.js +96 -29
  168. package/dist/lark-cli.js.map +1 -1
  169. package/dist/legacy-function-input-renderer.d.ts +6 -0
  170. package/dist/legacy-function-input-renderer.d.ts.map +1 -0
  171. package/dist/legacy-function-input-renderer.js +175 -0
  172. package/dist/legacy-function-input-renderer.js.map +1 -0
  173. package/dist/link-guard-check.d.ts +12 -0
  174. package/dist/link-guard-check.d.ts.map +1 -0
  175. package/dist/link-guard-check.js +138 -0
  176. package/dist/link-guard-check.js.map +1 -0
  177. package/dist/managed-agent-docs.d.ts +14 -0
  178. package/dist/managed-agent-docs.d.ts.map +1 -0
  179. package/dist/managed-agent-docs.js +172 -0
  180. package/dist/managed-agent-docs.js.map +1 -0
  181. package/dist/mutation-schema.d.ts +6 -0
  182. package/dist/mutation-schema.d.ts.map +1 -1
  183. package/dist/mutation-schema.js +6 -0
  184. package/dist/mutation-schema.js.map +1 -1
  185. package/dist/mutation.d.ts +4 -1
  186. package/dist/mutation.d.ts.map +1 -1
  187. package/dist/mutation.js +17 -2
  188. package/dist/mutation.js.map +1 -1
  189. package/dist/npm.d.ts +1 -0
  190. package/dist/npm.d.ts.map +1 -1
  191. package/dist/npm.js +28 -0
  192. package/dist/npm.js.map +1 -1
  193. package/dist/preview-receipt.d.ts +0 -2
  194. package/dist/preview-receipt.d.ts.map +1 -1
  195. package/dist/preview-receipt.js +0 -28
  196. package/dist/preview-receipt.js.map +1 -1
  197. package/dist/process.d.ts +1 -0
  198. package/dist/process.d.ts.map +1 -1
  199. package/dist/process.js +25 -0
  200. package/dist/process.js.map +1 -1
  201. package/dist/program.d.ts.map +1 -1
  202. package/dist/program.js +239 -26
  203. package/dist/program.js.map +1 -1
  204. package/dist/project-build.d.ts +2 -1
  205. package/dist/project-build.d.ts.map +1 -1
  206. package/dist/project-build.js +53 -16
  207. package/dist/project-build.js.map +1 -1
  208. package/dist/project-capabilities.d.ts +8 -0
  209. package/dist/project-capabilities.d.ts.map +1 -0
  210. package/dist/project-capabilities.js +47 -0
  211. package/dist/project-capabilities.js.map +1 -0
  212. package/dist/project-context.d.ts +66 -0
  213. package/dist/project-context.d.ts.map +1 -1
  214. package/dist/project-context.js +68 -6
  215. package/dist/project-context.js.map +1 -1
  216. package/dist/project-layout.d.ts +11 -0
  217. package/dist/project-layout.d.ts.map +1 -1
  218. package/dist/project-layout.js +63 -1
  219. package/dist/project-layout.js.map +1 -1
  220. package/dist/public-exports.d.ts +5 -0
  221. package/dist/public-exports.d.ts.map +1 -0
  222. package/dist/public-exports.js +76 -0
  223. package/dist/public-exports.js.map +1 -0
  224. package/dist/public-sql-error.d.ts +3 -1
  225. package/dist/public-sql-error.d.ts.map +1 -1
  226. package/dist/public-sql-error.js +5 -2
  227. package/dist/public-sql-error.js.map +1 -1
  228. package/dist/pull.d.ts +1 -0
  229. package/dist/pull.d.ts.map +1 -1
  230. package/dist/pull.js +103 -20
  231. package/dist/pull.js.map +1 -1
  232. package/dist/sdk-codegen.d.ts +16 -0
  233. package/dist/sdk-codegen.d.ts.map +1 -0
  234. package/dist/sdk-codegen.js +181 -0
  235. package/dist/sdk-codegen.js.map +1 -0
  236. package/dist/sdk-install.d.ts +4 -0
  237. package/dist/sdk-install.d.ts.map +1 -0
  238. package/dist/sdk-install.js +33 -0
  239. package/dist/sdk-install.js.map +1 -0
  240. package/dist/skill-frontmatter.d.ts +5 -0
  241. package/dist/skill-frontmatter.d.ts.map +1 -0
  242. package/dist/skill-frontmatter.js +28 -0
  243. package/dist/skill-frontmatter.js.map +1 -0
  244. package/dist/skill.d.ts +2 -1
  245. package/dist/skill.d.ts.map +1 -1
  246. package/dist/skill.js +18 -12
  247. package/dist/skill.js.map +1 -1
  248. package/dist/source-format.d.ts +10 -0
  249. package/dist/source-format.d.ts.map +1 -0
  250. package/dist/source-format.js +49 -0
  251. package/dist/source-format.js.map +1 -0
  252. package/dist/types.d.ts +6 -0
  253. package/dist/types.d.ts.map +1 -1
  254. package/dist/unified-functions.d.ts +22 -0
  255. package/dist/unified-functions.d.ts.map +1 -0
  256. package/dist/unified-functions.js +114 -0
  257. package/dist/unified-functions.js.map +1 -0
  258. package/dist/updates.d.ts +13 -1
  259. package/dist/updates.d.ts.map +1 -1
  260. package/dist/updates.js +65 -29
  261. package/dist/updates.js.map +1 -1
  262. package/dist/workspace-fingerprint.d.ts.map +1 -1
  263. package/dist/workspace-fingerprint.js +5 -0
  264. package/dist/workspace-fingerprint.js.map +1 -1
  265. package/package.json +17 -5
  266. package/skills/lark-base-database/SKILL.md +21 -55
  267. package/skills/lark-base-database/references/agent-tool-design.md +181 -0
  268. package/skills/lark-base-database/references/agent-tools.md +101 -0
  269. package/skills/lark-base-database/references/ai-function.md +80 -186
  270. package/skills/lark-base-database/references/database-function-limitations.md +12 -4
  271. package/skills/lark-base-database/references/database-function.md +49 -21
  272. package/skills/lark-base-database/references/development.md +81 -109
  273. package/skills/lark-base-database/references/environment-variables.md +2 -2
  274. package/skills/lark-base-database/references/faas.md +43 -16
  275. package/skills/lark-base-database/references/file-transfer.md +10 -33
  276. package/skills/lark-base-database/references/frontend-design-guide.md +1 -1
  277. package/skills/lark-base-database/references/legacy-ai-function.md +120 -0
  278. package/skills/lark-base-database/references/legacy-development.md +156 -0
  279. package/skills/lark-base-database/references/legacy-file-transfer.md +68 -0
  280. package/skills/lark-base-database/references/mutations.md +38 -29
  281. package/skills/lark-base-database/references/notifications.md +1 -1
  282. package/skills/lark-base-database/references/permission-design.md +11 -5
  283. package/skills/lark-base-database/references/release.md +22 -7
  284. package/skills/lark-base-database/references/verification.md +55 -16
  285. package/skills/lark-base-database/references/workspace-migration.md +86 -0
  286. package/skills/lark-base-database/references/workspace.md +55 -44
  287. package/templates/database-starter/README.md +2 -0
  288. package/templates/database-starter/database-functions/README.md +2 -2
  289. package/templates/database-starter/mutations/README.md +2 -2
  290. package/templates/database-starter/page/README.md +5 -4
  291. package/templates/database-starter/page/src/examples/ai-function/TextStreamOperation.tsx +6 -6
  292. package/templates/database-starter/page/src/lib/attachment-image.tsx +19 -5
  293. package/templates/database-starter/page/src/lib/database-runtime-attachment.test.ts +124 -5
  294. package/templates/database-starter/page/src/lib/database-runtime.test.ts +2 -2
  295. package/templates/database-starter/page/src/lib/database-runtime.ts +77 -13
  296. package/templates/database-starter/server-functions/scripts/run-tsc.mjs +3 -2
  297. package/templates/database-starter-v2/README.md +25 -0
  298. package/templates/database-starter-v2/base-app.config.ts +10 -0
  299. package/templates/database-starter-v2/database-functions/README.md +1 -0
  300. package/templates/database-starter-v2/gitignore +6 -0
  301. package/templates/database-starter-v2/mutations/README.md +1 -0
  302. package/templates/database-starter-v2/package-lock.json +2239 -0
  303. package/templates/database-starter-v2/package.json +18 -0
  304. package/templates/database-starter-v2/page/index.html +2 -0
  305. package/templates/database-starter-v2/page/package.json +25 -0
  306. package/templates/database-starter-v2/page/src/App.tsx +12 -0
  307. package/templates/database-starter-v2/page/src/generated/README.md +1 -0
  308. package/templates/database-starter-v2/page/src/index.css +1 -0
  309. package/templates/database-starter-v2/page/src/lib/date-time.ts +61 -0
  310. package/templates/database-starter-v2/page/src/main.tsx +6 -0
  311. package/templates/database-starter-v2/page/tsconfig.json +19 -0
  312. package/templates/database-starter-v2/page/vite.config.ts +3 -0
  313. package/templates/database-starter-v2/prettierignore +3 -0
  314. package/templates/database-starter-v2/server/functions/README.md +1 -0
  315. package/templates/database-starter-v2/server/functions/hello/contract.ts +5 -0
  316. package/templates/database-starter-v2/server/functions/hello/index.ts +7 -0
  317. package/templates/database-starter-v2/server/functions/hello/meta.json +1 -0
  318. package/templates/database-starter-v2/server/generated/runtime-profile.ts +5 -0
  319. package/templates/database-starter-v2/server/package.json +17 -0
  320. package/templates/database-starter-v2/server/tsconfig.json +14 -0
@@ -0,0 +1,185 @@
1
+ import { createRequire } from 'node:module';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { parse } from 'parse5';
6
+ import { parse as parseJavaScript } from '@babel/parser';
7
+ import { parseModule, walkAst } from './contract-extractor.js';
8
+ const sdkPackage = '@lark-base-open/base-database-app-sdk';
9
+ const registeredHmr = JSON.parse(readFileSync(new URL('../data/template-hmr-scripts.json', import.meta.url), 'utf8')).scripts.map(({ code }) => shape(parseJavaScript(code, { sourceType: 'module' }).program));
10
+ function isRegisteredHmr(code) {
11
+ try {
12
+ const ast = shape(parseJavaScript(code, { sourceType: 'module' }).program);
13
+ return registeredHmr.some((expected) => isDeepStrictEqual(ast, expected));
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ export function sdkPackageRoot(workspace) {
20
+ const require = createRequire(join(workspace, 'page/package.json'));
21
+ return require.resolve
22
+ .paths(sdkPackage)
23
+ ?.map((path) => join(path, sdkPackage))
24
+ .find((path) => existsSync(join(path, 'package.json')));
25
+ }
26
+ // Compare semantic AST fields, never comments/text fragments. This deliberately
27
+ // accepts only the known migrated starter, including its React mount and effect.
28
+ function shape(value) {
29
+ if (Array.isArray(value))
30
+ return value.map(shape);
31
+ if (!value || typeof value !== 'object')
32
+ return value;
33
+ return Object.fromEntries(Object.entries(value)
34
+ .filter(([key]) => ![
35
+ 'start',
36
+ 'end',
37
+ 'loc',
38
+ 'extra',
39
+ 'comments',
40
+ 'leadingComments',
41
+ 'trailingComments',
42
+ 'innerComments',
43
+ 'tokens',
44
+ ].includes(key))
45
+ .map(([key, child]) => [key, shape(child)]));
46
+ }
47
+ export function inspectDevBootstrap(workspace) {
48
+ const html = join(workspace, 'page/index.html');
49
+ if (!existsSync(html))
50
+ return 'uncertain';
51
+ let source;
52
+ try {
53
+ source = readFileSync(html, 'utf8');
54
+ }
55
+ catch {
56
+ return 'uncertain';
57
+ }
58
+ const scripts = [];
59
+ let inlineCount = 0, invalidInline = false;
60
+ const visitHtml = (node) => {
61
+ if (node.tagName === 'script') {
62
+ const attrs = new Map(node.attrs.map((a) => [a.name, a.value]));
63
+ if (attrs.get('type')?.toLowerCase() === 'module') {
64
+ if (attrs.has('src'))
65
+ scripts.push(attrs.get('src'));
66
+ else {
67
+ inlineCount++;
68
+ const code = node.childNodes
69
+ .map((child) => child.value ?? '')
70
+ .join('');
71
+ if (attrs.size !== 1 || !isRegisteredHmr(code))
72
+ invalidInline = true;
73
+ }
74
+ }
75
+ }
76
+ for (const child of node.childNodes ?? [])
77
+ visitHtml(child);
78
+ };
79
+ visitHtml(parse(source));
80
+ if (invalidInline ||
81
+ inlineCount > 1 ||
82
+ scripts.length !== 1 ||
83
+ !scripts[0] ||
84
+ !/^\/?src\/main\.[cm]?[jt]sx?$/.test(scripts[0]))
85
+ return 'uncertain';
86
+ const entry = join(workspace, 'page', scripts[0].replace(/^\//, ''));
87
+ if (!existsSync(entry))
88
+ return 'uncertain';
89
+ try {
90
+ const ast = parseModule(entry);
91
+ let dynamicImport = false;
92
+ walkAst(ast.program, (n) => {
93
+ if (n.type === 'ImportExpression' ||
94
+ (n.type === 'CallExpression' &&
95
+ n.callee?.type === 'Import'))
96
+ dynamicImport = true;
97
+ });
98
+ const bindings = new Set();
99
+ const namespaces = new Set();
100
+ const hasUnsupportedImport = ast.program.body.some((n) => n.type === 'ImportDeclaration' &&
101
+ ![
102
+ 'react',
103
+ 'react-dom/client',
104
+ '@lark-base-open/base-site-channel/runtime',
105
+ `${sdkPackage}/page`,
106
+ './App',
107
+ './components/database-runtime-ready',
108
+ './lib/database-runtime',
109
+ './index.css',
110
+ ].includes(String(n.source?.value)));
111
+ for (const item of ast.program.body) {
112
+ if (item.type !== 'ImportDeclaration')
113
+ continue;
114
+ const importSource = item.source;
115
+ if (importSource?.value !== `${sdkPackage}/page` ||
116
+ item.importKind === 'type')
117
+ continue;
118
+ for (const specifier of item.specifiers ?? []) {
119
+ const local = specifier.local;
120
+ const imported = specifier.imported;
121
+ if (specifier.type === 'ImportNamespaceSpecifier' && local?.name)
122
+ namespaces.add(String(local.name));
123
+ if (specifier.type === 'ImportSpecifier' &&
124
+ local?.name &&
125
+ (imported?.name ?? imported?.value) === 'startBaseApp' &&
126
+ specifier.importKind !== 'type')
127
+ bindings.add(String(local.name));
128
+ }
129
+ }
130
+ // Only direct top-level expression/initializer calls are provably executed.
131
+ // Calls under functions, conditionals, aliases or computed access fail closed.
132
+ const isStart = (node) => {
133
+ if (!node)
134
+ return false;
135
+ if (node.type === 'AwaitExpression' ||
136
+ (node.type === 'UnaryExpression' && node.operator === 'void'))
137
+ return isStart(node.argument);
138
+ if (node.type !== 'CallExpression' || node.optional)
139
+ return false;
140
+ const callee = node.callee;
141
+ if (callee.type === 'Identifier')
142
+ return bindings.has(String(callee.name));
143
+ return (callee.type === 'MemberExpression' &&
144
+ !callee.computed &&
145
+ callee.object?.type === 'Identifier' &&
146
+ namespaces.has(String(callee.object.name)) &&
147
+ callee.property?.name === 'startBaseApp');
148
+ };
149
+ for (const item of ast.program.body) {
150
+ if (item.type === 'ExpressionStatement' &&
151
+ isStart(item.expression))
152
+ return 'ready';
153
+ if (item.type === 'VariableDeclaration' &&
154
+ item.declarations.some((d) => isStart(d.init)))
155
+ return 'ready';
156
+ // Stop at control flow: later calls may never be reached. Imports/declarations
157
+ // do not execute their bodies, so shadowed parameters cannot count as calls.
158
+ if ([
159
+ 'ThrowStatement',
160
+ 'IfStatement',
161
+ 'TryStatement',
162
+ 'WhileStatement',
163
+ 'ForStatement',
164
+ 'SwitchStatement',
165
+ ].includes(String(item.type)))
166
+ break;
167
+ }
168
+ if (bindings.size ||
169
+ namespaces.size ||
170
+ hasUnsupportedImport ||
171
+ dynamicImport)
172
+ return 'uncertain';
173
+ return 'not-bootstrapped';
174
+ }
175
+ catch {
176
+ return 'uncertain';
177
+ }
178
+ }
179
+ export function bootstrapGuidance(status) {
180
+ const reason = status === 'uncertain'
181
+ ? 'Cannot statically verify SDK bootstrap in page/index.html. A single external module entry is required; only registered template-equivalent inline HMR scripts are allowed. Custom inline scripts or multiple entries are unsupported.'
182
+ : 'The page entry does not statically import and call SDK startBaseApp.';
183
+ return `DEV_SDK_NOT_BOOTSTRAPPED: ${reason}\nNext: follow Skill references/workspace-migration.md or the dev page bootstrap section in references/development.md to integrate the SDK while preserving existing mounting and providers. Minimal page/src/main.tsx entry: import { startBaseApp } from '${sdkPackage}/page'; import options from '../../base-app.config'; startBaseApp(options);\nOverride: use --skip-bootstrap-check only if you accept the risk of handshake failure.`;
184
+ }
185
+ //# sourceMappingURL=dev-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-bootstrap.js","sourceRoot":"","sources":["../src/dev-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAgB,MAAM,yBAAyB,CAAC;AAE7E,MAAM,UAAU,GAAG,uCAAuC,CAAC;AAE3D,MAAM,aAAa,GACjB,IAAI,CAAC,KAAK,CACR,YAAY,CACV,IAAI,GAAG,CAAC,mCAAmC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAC7D,MAAM,CACP,CAEJ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACzB,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAC/D,CAAC;AACF,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3E,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAID,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,OAAO;SACnB,KAAK,CAAC,UAAU,CAAC;QAClB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SACtC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,SAAS,KAAK,CAAC,KAAc;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,MAAM,CACL,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CACR,CAAC;QACC,OAAO;QACP,KAAK;QACL,KAAK;QACL,OAAO;QACP,UAAU;QACV,iBAAiB;QACjB,kBAAkB;QAClB,eAAe;QACf,QAAQ;KACT,CAAC,QAAQ,CAAC,GAAG,CAAC,CAClB;SACA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAC9C,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,IAAI,WAAW,GAAG,CAAC,EACjB,aAAa,GAAG,KAAK,CAAC;IACxB,MAAM,SAAS,GAAG,CAAC,IAAoC,EAAE,EAAE;QACzD,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;YACF,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAClD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;qBAChD,CAAC;oBACJ,WAAW,EAAE,CAAC;oBACd,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU;yBACzB,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;yBACtC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACZ,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;wBAAE,aAAa,GAAG,IAAI,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;YAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACzB,IACE,aAAa;QACb,WAAW,GAAG,CAAC;QACf,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,OAAO,CAAC,CAAC,CAAC;QACX,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QAEjD,OAAO,WAAW,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,OAA6B,EAAE,CAAC,CAAC,EAAE,EAAE;YAC/C,IACE,CAAC,CAAC,IAAI,KAAK,kBAAkB;gBAC7B,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB;oBACzB,CAAC,CAAC,MAAkB,EAAE,IAAI,KAAK,QAAQ,CAAC;gBAE3C,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,MAAM,oBAAoB,GAAI,GAAG,CAAC,OAAO,CAAC,IAAkB,CAAC,IAAI,CAC/D,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,KAAK,mBAAmB;YAC9B,CAAC;gBACC,OAAO;gBACP,kBAAkB;gBAClB,2CAA2C;gBAC3C,GAAG,UAAU,OAAO;gBACpB,OAAO;gBACP,qCAAqC;gBACrC,wBAAwB;gBACxB,aAAa;aACd,CAAC,QAAQ,CAAC,MAAM,CAAE,CAAC,CAAC,MAAkB,EAAE,KAAK,CAAC,CAAC,CACnD,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAiB,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;gBAAE,SAAS;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,MAA6B,CAAC;YACxD,IACE,YAAY,EAAE,KAAK,KAAK,GAAG,UAAU,OAAO;gBAC5C,IAAI,CAAC,UAAU,KAAK,MAAM;gBAE1B,SAAS;YACX,KAAK,MAAM,SAAS,IAAK,IAAI,CAAC,UAAwB,IAAI,EAAE,EAAE,CAAC;gBAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,KAA4B,CAAC;gBACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAA+B,CAAC;gBAC3D,IAAI,SAAS,CAAC,IAAI,KAAK,0BAA0B,IAAI,KAAK,EAAE,IAAI;oBAC9D,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrC,IACE,SAAS,CAAC,IAAI,KAAK,iBAAiB;oBACpC,KAAK,EAAE,IAAI;oBACX,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,EAAE,KAAK,CAAC,KAAK,cAAc;oBACtD,SAAS,CAAC,UAAU,KAAK,MAAM;oBAE/B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,+EAA+E;QAC/E,MAAM,OAAO,GAAG,CAAC,IAAyB,EAAW,EAAE;YACrD,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,IACE,IAAI,CAAC,IAAI,KAAK,iBAAiB;gBAC/B,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC;gBAE7D,OAAO,OAAO,CAAC,IAAI,CAAC,QAAmB,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAiB,CAAC;YACtC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;gBAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,OAAO,CACL,MAAM,CAAC,IAAI,KAAK,kBAAkB;gBAClC,CAAC,MAAM,CAAC,QAAQ;gBACf,MAAM,CAAC,MAAkB,EAAE,IAAI,KAAK,YAAY;gBACjD,UAAU,CAAC,GAAG,CAAC,MAAM,CAAE,MAAM,CAAC,MAAkB,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,CAAC,QAAoB,EAAE,IAAI,KAAK,cAAc,CACtD,CAAC;QACJ,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAiB,EAAE,CAAC;YACjD,IACE,IAAI,CAAC,IAAI,KAAK,qBAAqB;gBACnC,OAAO,CAAC,IAAI,CAAC,UAAqB,CAAC;gBAEnC,OAAO,OAAO,CAAC;YACjB,IACE,IAAI,CAAC,IAAI,KAAK,qBAAqB;gBAClC,IAAI,CAAC,YAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAe,CAAC,CAAC;gBAExE,OAAO,OAAO,CAAC;YACjB,+EAA+E;YAC/E,6EAA6E;YAC7E,IACE;gBACE,gBAAgB;gBAChB,aAAa;gBACb,cAAc;gBACd,gBAAgB;gBAChB,cAAc;gBACd,iBAAiB;aAClB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE7B,MAAM;QACV,CAAC;QACD,IACE,QAAQ,CAAC,IAAI;YACb,UAAU,CAAC,IAAI;YACf,oBAAoB;YACpB,aAAa;YAEb,OAAO,WAAW,CAAC;QACrB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA4C;IAE5C,MAAM,MAAM,GACV,MAAM,KAAK,WAAW;QACpB,CAAC,CAAC,uOAAuO;QACzO,CAAC,CAAC,sEAAsE,CAAC;IAC7E,OAAO,6BAA6B,MAAM,+PAA+P,UAAU,qKAAqK,CAAC;AAC3d,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare const DEV_HOST_TIMEOUT_MS = 120000;
2
+ export declare const DEV_HOST_HINT = "DEV_HOST_NOT_CONNECTED";
3
+ export declare const DEV_HOST_MESSAGE: string;
4
+ export declare function devHostTimeout(value?: string | undefined): number;
5
+ export interface DevEvent {
6
+ schemaVersion: 1;
7
+ event: string;
8
+ [key: string]: unknown;
9
+ }
10
+ /** ready is only an observation of SDK lifecycle completion, never authorization. */
11
+ export declare class DevEvents {
12
+ readonly context: Record<string, unknown>;
13
+ readonly emit: (event: DevEvent) => void;
14
+ readonly hostTimeoutMs: number;
15
+ private listening;
16
+ private ready;
17
+ private stopped;
18
+ private timer;
19
+ constructor(context: Record<string, unknown>, emit: (event: DevEvent) => void, hostTimeoutMs?: number);
20
+ send(event: string, detail?: Record<string, unknown>): void;
21
+ cancelHostWait(): void;
22
+ observe(localOrigin: string): void;
23
+ }
24
+ //# sourceMappingURL=dev-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-events.d.ts","sourceRoot":"","sources":["../src/dev-events.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAC3C,eAAO,MAAM,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,gBAAgB,QAI8D,CAAC;AAE5F,wBAAgB,cAAc,CAC5B,KAAK,qBAAgD,GACpD,MAAM,CAaR;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,CAAC,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,qFAAqF;AACrF,qBAAa,SAAS;IAMlB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI;IACxC,QAAQ,CAAC,aAAa;IAPxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAA4C;IACzD,YACW,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EAC/B,aAAa,SAAsB,EAC1C;IACJ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,QAwBvD;IACD,cAAc,SAEb;IACD,OAAO,CAAC,WAAW,EAAE,MAAM,QAE1B;CACF"}
@@ -0,0 +1,67 @@
1
+ export const DEV_HOST_TIMEOUT_MS = 120_000;
2
+ export const DEV_HOST_HINT = 'DEV_HOST_NOT_CONNECTED';
3
+ export const DEV_HOST_MESSAGE = 'The host page has not loaded the local development server. Local changes are not visible in the host yet. ' +
4
+ 'Common causes: the CLI link has not been opened, the browser has blocked local network access, or the current domain has no local development entry and redirects to the published application. ' +
5
+ 'Open the link printed by the CLI, allow local network access, and retry. If the page directly shows the published application, this domain does not currently support local development; use deploy to publish a Preview for verification. ' +
6
+ 'The local server is still running and will report dev.ready if the host connects later.';
7
+ export function devHostTimeout(value = process.env.BASE_DATABASE_DEV_HOST_TIMEOUT_MS) {
8
+ if (value === undefined)
9
+ return DEV_HOST_TIMEOUT_MS;
10
+ const timeout = Number(value);
11
+ if (!/^\d+$/.test(value) ||
12
+ !Number.isSafeInteger(timeout) ||
13
+ timeout < 1 ||
14
+ timeout > 2_147_483_647)
15
+ throw new Error('DEV_HOST_TIMEOUT_INVALID: BASE_DATABASE_DEV_HOST_TIMEOUT_MS must be an integer from 1 to 2147483647 milliseconds.');
16
+ return timeout;
17
+ }
18
+ /** ready is only an observation of SDK lifecycle completion, never authorization. */
19
+ export class DevEvents {
20
+ context;
21
+ emit;
22
+ hostTimeoutMs;
23
+ listening = false;
24
+ ready = false;
25
+ stopped = false;
26
+ timer;
27
+ constructor(context, emit, hostTimeoutMs = DEV_HOST_TIMEOUT_MS) {
28
+ this.context = context;
29
+ this.emit = emit;
30
+ this.hostTimeoutMs = hostTimeoutMs;
31
+ }
32
+ send(event, detail = {}) {
33
+ if (this.stopped)
34
+ return;
35
+ if (event === 'dev.listening' && !this.listening) {
36
+ this.listening = true;
37
+ const started = performance.now();
38
+ this.timer = setTimeout(() => {
39
+ this.send('dev.host_not_connected', {
40
+ elapsedMs: Math.round(performance.now() - started),
41
+ hint: DEV_HOST_HINT,
42
+ message: DEV_HOST_MESSAGE,
43
+ });
44
+ }, this.hostTimeoutMs);
45
+ this.timer.unref();
46
+ }
47
+ if (event === 'dev.ready') {
48
+ if (!this.listening || this.ready || !this.context.localOrigin)
49
+ return;
50
+ this.ready = true;
51
+ clearTimeout(this.timer);
52
+ }
53
+ this.emit({ ...this.context, ...detail, schemaVersion: 1, event });
54
+ if (event === 'dev.stopped') {
55
+ this.stopped = true;
56
+ clearTimeout(this.timer);
57
+ }
58
+ }
59
+ cancelHostWait() {
60
+ clearTimeout(this.timer);
61
+ }
62
+ observe(localOrigin) {
63
+ if (localOrigin === this.context.localOrigin)
64
+ this.send('dev.ready');
65
+ }
66
+ }
67
+ //# sourceMappingURL=dev-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-events.js","sourceRoot":"","sources":["../src/dev-events.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAC3B,4GAA4G;IAC5G,kMAAkM;IAClM,6OAA6O;IAC7O,yFAAyF,CAAC;AAE5F,MAAM,UAAU,cAAc,CAC5B,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iCAAiC;IAErD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IACE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAC9B,OAAO,GAAG,CAAC;QACX,OAAO,GAAG,aAAa;QAEvB,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAOD,qFAAqF;AACrF,MAAM,OAAO,SAAS;IAMT,OAAO;IACP,IAAI;IACJ,aAAa;IAPhB,SAAS,GAAG,KAAK,CAAC;IAClB,KAAK,GAAG,KAAK,CAAC;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,KAAK,CAA4C;IACzD,YACW,OAAgC,EAChC,IAA+B,EAC/B,aAAa,GAAG,mBAAmB;uBAFnC,OAAO;oBACP,IAAI;6BACJ,aAAa;IACrB,CAAC;IACJ,IAAI,CAAC,KAAa,EAAE,MAAM,GAA4B,EAAE;QACtD,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,KAAK,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAClC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;oBAClD,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,gBAAgB;iBAC1B,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;gBAAE,OAAO;YACvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,cAAc;QACZ,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,WAAmB;QACzB,IAAI,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ /** Project-private state; excluded by starter gitignore and archive source globs. */
2
+ export declare function projectPairingToken(workspace: string, reset?: boolean): string;
3
+ export declare function redactPairing(value: string, token?: string): string;
4
+ //# sourceMappingURL=dev-pairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-pairing.d.ts","sourceRoot":"","sources":["../src/dev-pairing.ts"],"names":[],"mappings":"AAgBA,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAyD5E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,54 @@
1
+ import { DEVELOPMENT_PAIRING } from './development-pairing.generated.js';
2
+ import { randomBytes } from 'node:crypto';
3
+ import { constants, openSync, closeSync, readFileSync, writeFileSync, mkdirSync, fchmodSync, fstatSync, lstatSync, ftruncateSync, } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ /** Project-private state; excluded by starter gitignore and archive source globs. */
6
+ export function projectPairingToken(workspace, reset = false) {
7
+ let directory = workspace;
8
+ for (const part of ['.base-database-cli', 'state']) {
9
+ directory = join(directory, part);
10
+ mkdirSync(directory, { recursive: true, mode: 0o700 });
11
+ if (!lstatSync(directory).isDirectory() ||
12
+ lstatSync(directory).isSymbolicLink())
13
+ throw new Error('DEV_PAIRING_STATE_UNSAFE: The pairing state directory must not be a symbolic link.');
14
+ }
15
+ const path = join(directory, 'dev-pairing-token');
16
+ let fd;
17
+ let created = false;
18
+ try {
19
+ fd = openSync(path, constants.O_CREAT |
20
+ constants.O_EXCL |
21
+ constants.O_RDWR |
22
+ constants.O_NOFOLLOW, 0o600);
23
+ created = true;
24
+ }
25
+ catch (error) {
26
+ if (error.code !== 'EEXIST')
27
+ throw error;
28
+ fd = openSync(path, constants.O_RDWR | constants.O_NOFOLLOW);
29
+ }
30
+ try {
31
+ const stat = fstatSync(fd);
32
+ if (!stat.isFile() || stat.nlink !== 1)
33
+ throw new Error('DEV_PAIRING_STATE_UNSAFE: Pairing state must be a regular file with a single hard link.');
34
+ fchmodSync(fd, 0o600);
35
+ if (created || reset) {
36
+ const token = randomBytes(DEVELOPMENT_PAIRING.secretBytes).toString('base64url');
37
+ ftruncateSync(fd, 0);
38
+ writeFileSync(fd, token);
39
+ return token;
40
+ }
41
+ const token = readFileSync(fd, 'utf8');
42
+ if (!/^[A-Za-z0-9_-]{43}$/.test(token) ||
43
+ Buffer.from(token, 'base64url').toString('base64url') !== token)
44
+ throw new Error('DEV_PAIRING_STATE_INVALID: Use dev --reset-pairing to generate a new pairing token.');
45
+ return token;
46
+ }
47
+ finally {
48
+ closeSync(fd);
49
+ }
50
+ }
51
+ export function redactPairing(value, token) {
52
+ return (token ? value.replaceAll(token, '[REDACTED]') : value).replace(/#t=[^\s"\\]*/g, '#t=[REDACTED]');
53
+ }
54
+ //# sourceMappingURL=dev-pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-pairing.js","sourceRoot":"","sources":["../src/dev-pairing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Shared with the host development route: only fixed loopback ports are supported. */
2
+ export declare const DEV_PORTS: number[];
3
+ export declare function developmentUrl(baseAppUrl: string, port: number, hostOrigin?: string, pairingToken?: string): string;
4
+ //# sourceMappingURL=dev-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-url.d.ts","sourceRoot":"","sources":["../src/dev-url.ts"],"names":[],"mappings":"AACA,uFAAuF;AACvF,eAAO,MAAM,SAAS,UAGrB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAkCR"}
@@ -0,0 +1,29 @@
1
+ import { DEVELOPMENT_PAIRING } from './development-pairing.generated.js';
2
+ /** Shared with the host development route: only fixed loopback ports are supported. */
3
+ export const DEV_PORTS = Array.from({ length: DEVELOPMENT_PAIRING.portMax - DEVELOPMENT_PAIRING.portMin + 1 }, (_, index) => DEVELOPMENT_PAIRING.portMin + index);
4
+ export function developmentUrl(baseAppUrl, port, hostOrigin, pairingToken) {
5
+ if (!DEV_PORTS.includes(port))
6
+ throw new Error('DEV_PORT_INVALID: Only ports 43100-43109 are supported.');
7
+ const url = new URL(baseAppUrl);
8
+ if (url.protocol !== 'https:' ||
9
+ url.username ||
10
+ url.password ||
11
+ !/^\/baseapp\/[^/]+\/?$/.test(url.pathname) ||
12
+ ['home', 'new', 'static', 'dev'].includes(decodeURIComponent(url.pathname.split('/')[2] ?? '').toLowerCase()))
13
+ throw new Error('DEV_BASE_APP_URL_INVALID: An HTTPS host application URL is required.');
14
+ if (hostOrigin) {
15
+ const host = new URL(hostOrigin);
16
+ if (host.protocol !== 'https:' ||
17
+ host.origin !== hostOrigin ||
18
+ host.username ||
19
+ host.password)
20
+ throw new Error('DEV_HOST_ORIGIN_INVALID: An exact HTTPS origin is required.');
21
+ url.host = host.host;
22
+ }
23
+ const siteToken = url.pathname.split('/')[2];
24
+ url.pathname = `/baseapp/dev/${siteToken}/${port}`;
25
+ url.search = '';
26
+ url.hash = pairingToken ? `t=${pairingToken}` : '';
27
+ return url.href;
28
+ }
29
+ //# sourceMappingURL=dev-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-url.js","sourceRoot":"","sources":["../src/dev-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,uFAAuF;AACvF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CACjC,EAAE,MAAM,EAAE,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,GAAG,CAAC,EAAE,EACzE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAClD,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,IAAY,EACZ,UAAmB,EACnB,YAAqB;IAErB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,IACE,GAAG,CAAC,QAAQ,KAAK,QAAQ;QACzB,GAAG,CAAC,QAAQ;QACZ,GAAG,CAAC,QAAQ;QACZ,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3C,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CACvC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CACnE;QAED,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;IACJ,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,IACE,IAAI,CAAC,QAAQ,KAAK,QAAQ;YAC1B,IAAI,CAAC,MAAM,KAAK,UAAU;YAC1B,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ;YAEb,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAC9C,GAAG,CAAC,QAAQ,GAAG,gBAAgB,SAAS,IAAI,IAAI,EAAE,CAAC;IACnD,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface ViteStart {
2
+ workspace: string;
3
+ port: number;
4
+ hostOrigin: string;
5
+ templateVersion: number;
6
+ }
7
+ export declare function injectDevObserver(html: string): string;
8
+ export declare function startVite(input: ViteStart): Promise<any>;
9
+ //# sourceMappingURL=dev-vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-vite.d.ts","sourceRoot":"","sources":["../src/dev-vite.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6BtD;AACD,wBAAsB,SAAS,CAAC,KAAK,EAAE,SAAS,gBAgM/C"}