@objectstack/cli 4.0.3 → 4.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/README.md +12 -25
- package/dist/commands/build.d.ts +5 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +6 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +128 -6
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create.js +1 -1
- package/dist/commands/data/create.js +2 -2
- package/dist/commands/data/create.js.map +1 -1
- package/dist/commands/data/delete.js +2 -2
- package/dist/commands/data/delete.js.map +1 -1
- package/dist/commands/data/get.js +2 -2
- package/dist/commands/data/get.js.map +1 -1
- package/dist/commands/data/query.js +2 -2
- package/dist/commands/data/query.js.map +1 -1
- package/dist/commands/data/update.js +2 -2
- package/dist/commands/data/update.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +48 -19
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/generate.js +9 -9
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/i18n/check.d.ts +18 -0
- package/dist/commands/i18n/check.d.ts.map +1 -0
- package/dist/commands/i18n/check.js +153 -0
- package/dist/commands/i18n/check.js.map +1 -0
- package/dist/commands/init.js +2 -2
- package/dist/commands/lint.d.ts +3 -0
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +24 -0
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/login.d.ts +17 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +313 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/{auth/logout.js → logout.js} +14 -2
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/meta/delete.js +2 -2
- package/dist/commands/meta/delete.js.map +1 -1
- package/dist/commands/meta/get.js +2 -2
- package/dist/commands/meta/get.js.map +1 -1
- package/dist/commands/meta/list.js +2 -2
- package/dist/commands/meta/list.js.map +1 -1
- package/dist/commands/meta/register.js +2 -2
- package/dist/commands/meta/register.js.map +1 -1
- package/dist/commands/projects/bind.d.ts +30 -0
- package/dist/commands/projects/bind.d.ts.map +1 -0
- package/dist/commands/projects/bind.js +132 -0
- package/dist/commands/projects/bind.js.map +1 -0
- package/dist/commands/projects/create.d.ts +28 -0
- package/dist/commands/projects/create.d.ts.map +1 -0
- package/dist/commands/projects/create.js +120 -0
- package/dist/commands/projects/create.js.map +1 -0
- package/dist/commands/projects/list.d.ts +21 -0
- package/dist/commands/projects/list.d.ts.map +1 -0
- package/dist/commands/projects/list.js +79 -0
- package/dist/commands/projects/list.js.map +1 -0
- package/dist/commands/projects/projects.test.d.ts +2 -0
- package/dist/commands/projects/projects.test.d.ts.map +1 -0
- package/dist/commands/projects/projects.test.js +56 -0
- package/dist/commands/projects/projects.test.js.map +1 -0
- package/dist/commands/projects/show.d.ts +21 -0
- package/dist/commands/projects/show.d.ts.map +1 -0
- package/dist/commands/projects/show.js +72 -0
- package/dist/commands/projects/show.js.map +1 -0
- package/dist/commands/projects/switch.d.ts +24 -0
- package/dist/commands/projects/switch.d.ts.map +1 -0
- package/dist/commands/projects/switch.js +64 -0
- package/dist/commands/projects/switch.js.map +1 -0
- package/dist/commands/publish.d.ts +14 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +91 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/{auth/login.d.ts → register.d.ts} +3 -2
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/{auth/login.js → register.js} +44 -61
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/serve.d.ts +8 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +606 -44
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/start.d.ts +11 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +43 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/{auth/whoami.js → whoami.js} +5 -5
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/utils/account.d.ts +31 -0
- package/dist/utils/account.d.ts.map +1 -0
- package/dist/utils/account.js +154 -0
- package/dist/utils/account.js.map +1 -0
- package/dist/utils/api-client.d.ts +10 -4
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +13 -7
- package/dist/utils/api-client.js.map +1 -1
- package/dist/utils/auth-config.d.ts +6 -0
- package/dist/utils/auth-config.d.ts.map +1 -1
- package/dist/utils/auth-config.js.map +1 -1
- package/dist/utils/build-runtime.d.ts +45 -0
- package/dist/utils/build-runtime.d.ts.map +1 -0
- package/dist/utils/build-runtime.js +154 -0
- package/dist/utils/build-runtime.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +17 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/console.d.ts +32 -0
- package/dist/utils/console.d.ts.map +1 -0
- package/dist/utils/console.js +169 -0
- package/dist/utils/console.js.map +1 -0
- package/dist/utils/extract-hook-body.d.ts +13 -0
- package/dist/utils/extract-hook-body.d.ts.map +1 -0
- package/dist/utils/extract-hook-body.js +175 -0
- package/dist/utils/extract-hook-body.js.map +1 -0
- package/dist/utils/format.d.ts +8 -0
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +15 -2
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/i18n-coverage.d.ts +61 -0
- package/dist/utils/i18n-coverage.d.ts.map +1 -0
- package/dist/utils/i18n-coverage.js +176 -0
- package/dist/utils/i18n-coverage.js.map +1 -0
- package/dist/utils/lower-callables.d.ts +17 -0
- package/dist/utils/lower-callables.d.ts.map +1 -0
- package/dist/utils/lower-callables.js +181 -0
- package/dist/utils/lower-callables.js.map +1 -0
- package/dist/utils/plugin-detection.d.ts +1 -0
- package/dist/utils/plugin-detection.d.ts.map +1 -1
- package/dist/utils/plugin-detection.js +41 -0
- package/dist/utils/plugin-detection.js.map +1 -1
- package/dist/utils/studio.d.ts +1 -0
- package/dist/utils/studio.d.ts.map +1 -1
- package/dist/utils/studio.js +25 -9
- package/dist/utils/studio.js.map +1 -1
- package/package.json +55 -21
- package/.turbo/turbo-build.log +0 -4
- package/CHANGELOG.md +0 -805
- package/bin/run-dev.js +0 -5
- package/dist/commands/auth/login.d.ts.map +0 -1
- package/dist/commands/auth/login.js.map +0 -1
- package/dist/commands/auth/logout.d.ts.map +0 -1
- package/dist/commands/auth/logout.js.map +0 -1
- package/dist/commands/auth/whoami.d.ts.map +0 -1
- package/dist/commands/auth/whoami.js.map +0 -1
- package/dist/commands/codemod/v2-to-v3.d.ts +0 -10
- package/dist/commands/codemod/v2-to-v3.d.ts.map +0 -1
- package/dist/commands/codemod/v2-to-v3.js +0 -145
- package/dist/commands/codemod/v2-to-v3.js.map +0 -1
- package/dist/commands/plugin/add.d.ts +0 -22
- package/dist/commands/plugin/add.d.ts.map +0 -1
- package/dist/commands/plugin/add.js +0 -93
- package/dist/commands/plugin/add.js.map +0 -1
- package/dist/commands/plugin/build.d.ts +0 -29
- package/dist/commands/plugin/build.d.ts.map +0 -1
- package/dist/commands/plugin/build.js +0 -170
- package/dist/commands/plugin/build.js.map +0 -1
- package/dist/commands/plugin/info.d.ts +0 -10
- package/dist/commands/plugin/info.d.ts.map +0 -1
- package/dist/commands/plugin/info.js +0 -65
- package/dist/commands/plugin/info.js.map +0 -1
- package/dist/commands/plugin/list.d.ts +0 -13
- package/dist/commands/plugin/list.d.ts.map +0 -1
- package/dist/commands/plugin/list.js +0 -78
- package/dist/commands/plugin/list.js.map +0 -1
- package/dist/commands/plugin/publish.d.ts +0 -27
- package/dist/commands/plugin/publish.d.ts.map +0 -1
- package/dist/commands/plugin/publish.js +0 -152
- package/dist/commands/plugin/publish.js.map +0 -1
- package/dist/commands/plugin/remove.d.ts +0 -20
- package/dist/commands/plugin/remove.d.ts.map +0 -1
- package/dist/commands/plugin/remove.js +0 -79
- package/dist/commands/plugin/remove.js.map +0 -1
- package/dist/commands/plugin/validate.d.ts +0 -23
- package/dist/commands/plugin/validate.d.ts.map +0 -1
- package/dist/commands/plugin/validate.js +0 -251
- package/dist/commands/plugin/validate.js.map +0 -1
- package/src/bin.ts +0 -13
- package/src/commands/auth/login.ts +0 -188
- package/src/commands/auth/logout.ts +0 -51
- package/src/commands/auth/whoami.ts +0 -85
- package/src/commands/codemod/v2-to-v3.ts +0 -171
- package/src/commands/compile.ts +0 -114
- package/src/commands/create.ts +0 -281
- package/src/commands/data/create.ts +0 -110
- package/src/commands/data/delete.ts +0 -84
- package/src/commands/data/get.ts +0 -84
- package/src/commands/data/query.ts +0 -127
- package/src/commands/data/update.ts +0 -114
- package/src/commands/dev.ts +0 -83
- package/src/commands/diff.ts +0 -294
- package/src/commands/doctor.ts +0 -572
- package/src/commands/explain.ts +0 -412
- package/src/commands/generate.ts +0 -924
- package/src/commands/info.ts +0 -124
- package/src/commands/init.ts +0 -327
- package/src/commands/lint.ts +0 -315
- package/src/commands/meta/delete.ts +0 -79
- package/src/commands/meta/get.ts +0 -73
- package/src/commands/meta/list.ts +0 -105
- package/src/commands/meta/register.ts +0 -97
- package/src/commands/plugin/add.ts +0 -112
- package/src/commands/plugin/build.ts +0 -193
- package/src/commands/plugin/info.ts +0 -79
- package/src/commands/plugin/list.ts +0 -93
- package/src/commands/plugin/publish.ts +0 -176
- package/src/commands/plugin/remove.ts +0 -97
- package/src/commands/plugin/validate.ts +0 -268
- package/src/commands/serve.ts +0 -411
- package/src/commands/studio.ts +0 -52
- package/src/commands/test.ts +0 -135
- package/src/commands/validate.ts +0 -143
- package/src/index.ts +0 -22
- package/src/utils/api-client.ts +0 -88
- package/src/utils/auth-config.ts +0 -107
- package/src/utils/config.ts +0 -80
- package/src/utils/format.ts +0 -267
- package/src/utils/output-formatter.ts +0 -91
- package/src/utils/plugin-detection.ts +0 -16
- package/src/utils/plugin-helpers.ts +0 -37
- package/src/utils/studio.ts +0 -350
- package/test/commands.test.ts +0 -128
- package/test/create.test.ts +0 -25
- package/test/plugin-commands.test.ts +0 -44
- package/test/plugin.test.ts +0 -169
- package/test/remote-api-commands.test.ts +0 -188
- package/test/remote-api-utils.test.ts +0 -196
- package/test/serve-host-config.test.ts +0 -77
- package/tsconfig.build.json +0 -20
- package/tsconfig.json +0 -25
- package/tsup.config.ts +0 -23
- /package/dist/commands/{auth/logout.d.ts → logout.d.ts} +0 -0
- /package/dist/commands/{auth/whoami.d.ts → whoami.d.ts} +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a single ESM bundle that re-exports every inline handler function
|
|
3
|
+
* collected by `lowerCallables`. The bundle is the second half of the
|
|
4
|
+
* "two-product" build (alongside `objectstack.json`):
|
|
5
|
+
*
|
|
6
|
+
* dist/
|
|
7
|
+
* ├── objectstack.json
|
|
8
|
+
* └── objectstack-runtime.{contenthash}.mjs ← THIS
|
|
9
|
+
*
|
|
10
|
+
* At runtime, `StandaloneStack` (and `MultiProjectPlugin`) dynamic-import
|
|
11
|
+
* the mjs and merge `module.functions` into the bundle before
|
|
12
|
+
* `bindHooks(...)` runs — so string-named handlers resolve to real code
|
|
13
|
+
* even though the JSON artifact is pure metadata.
|
|
14
|
+
*/
|
|
15
|
+
export interface BuildRuntimeOptions {
|
|
16
|
+
/** Absolute path to the user's `objectstack.config.{ts,js,mjs}`. */
|
|
17
|
+
sourceConfigPath: string;
|
|
18
|
+
/** Lowered handler refs (`name → handlerName`) — mirrors `LoweringResult.functions`. */
|
|
19
|
+
refs: string[];
|
|
20
|
+
/** Output directory (e.g. `<cwd>/dist`). Created if missing. */
|
|
21
|
+
outputDir: string;
|
|
22
|
+
/** Base file name without hash, e.g. `objectstack-runtime`. */
|
|
23
|
+
baseName?: string;
|
|
24
|
+
/** External package names to mark as external (`@objectstack/*` etc.). */
|
|
25
|
+
externalPackages?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface BuildRuntimeResult {
|
|
28
|
+
/** Absolute path to the emitted mjs. */
|
|
29
|
+
outputPath: string;
|
|
30
|
+
/** File name (relative to outputDir) — embedded in objectstack.json. */
|
|
31
|
+
outputFileName: string;
|
|
32
|
+
/** Content hash (sha256, first 16 hex chars). */
|
|
33
|
+
hash: string;
|
|
34
|
+
/** Bundle size in bytes. */
|
|
35
|
+
size: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function buildRuntimeBundle(opts: BuildRuntimeOptions): Promise<BuildRuntimeResult>;
|
|
38
|
+
/** Best-effort cleanup of stale `objectstack-runtime.*.mjs` files. */
|
|
39
|
+
export declare function cleanupOldRuntimeBundles(outputDir: string, keepFileName: string, baseName?: string): number;
|
|
40
|
+
/** Reuse: read an existing bundle and recompute its size for stats. */
|
|
41
|
+
export declare function statBundle(outputPath: string): {
|
|
42
|
+
size: number;
|
|
43
|
+
} | null;
|
|
44
|
+
export declare const runtimeBundlePathRelative: (outputDir: string, file: string) => string;
|
|
45
|
+
//# sourceMappingURL=build-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-runtime.d.ts","sourceRoot":"","sources":["../../src/utils/build-runtime.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,CAAC;IACzB,wFAAwF;IACxF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AA6DD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4D/F;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,MAAM,CAejH;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOtE;AAED,eAAO,MAAM,yBAAyB,GAAI,WAAW,MAAM,EAAE,MAAM,MAAM,KAAG,MACf,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { mkdirSync, writeFileSync, readFileSync, existsSync, unlinkSync, readdirSync } from 'node:fs';
|
|
4
|
+
import { dirname, basename, resolve as resolvePath, relative, sep as PATH_SEP } from 'node:path';
|
|
5
|
+
const DEFAULT_BASE = 'objectstack-runtime';
|
|
6
|
+
/**
|
|
7
|
+
* Generate the entry source that re-extracts callable handlers from the
|
|
8
|
+
* compiled config. We bundle the user's config transitively (so every
|
|
9
|
+
* `*.hook.ts` import is captured), then walk the same shape the lowering
|
|
10
|
+
* pass walked and re-export the matching handlers under the same string
|
|
11
|
+
* keys. The runtime side merges this map into `bundle.functions`.
|
|
12
|
+
*/
|
|
13
|
+
function generateEntrySource(sourceConfigPath, refs, entryDir) {
|
|
14
|
+
// Use a POSIX-style relative path so esbuild's resolver bundles the
|
|
15
|
+
// user's config + every transitively-imported `*.hook.ts` into the
|
|
16
|
+
// emitted ESM. A `file://` URL would be treated as external.
|
|
17
|
+
let importPath = relative(entryDir, sourceConfigPath).split(PATH_SEP).join('/');
|
|
18
|
+
if (!importPath.startsWith('.'))
|
|
19
|
+
importPath = './' + importPath;
|
|
20
|
+
const refLiteral = JSON.stringify(refs);
|
|
21
|
+
return `// AUTO-GENERATED by @objectstack/cli — do not edit.
|
|
22
|
+
import config from ${JSON.stringify(importPath)};
|
|
23
|
+
|
|
24
|
+
const REFS = new Set(${refLiteral});
|
|
25
|
+
|
|
26
|
+
function collect(cfg) {
|
|
27
|
+
const out = Object.create(null);
|
|
28
|
+
if (!cfg || typeof cfg !== 'object') return out;
|
|
29
|
+
// Hooks: { name, handler }
|
|
30
|
+
if (Array.isArray(cfg.hooks)) {
|
|
31
|
+
for (const h of cfg.hooks) {
|
|
32
|
+
if (h && typeof h === 'object' && typeof h.handler === 'function' && typeof h.name === 'string') {
|
|
33
|
+
if (REFS.has(h.name)) out[h.name] = h.handler;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Top-level functions map
|
|
38
|
+
if (cfg.functions && !Array.isArray(cfg.functions) && typeof cfg.functions === 'object') {
|
|
39
|
+
for (const [k, v] of Object.entries(cfg.functions)) {
|
|
40
|
+
if (typeof v === 'function' && REFS.has(k)) out[k] = v;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Top-level functions array
|
|
44
|
+
if (Array.isArray(cfg.functions)) {
|
|
45
|
+
for (const entry of cfg.functions) {
|
|
46
|
+
if (entry && typeof entry === 'object' && typeof entry.handler === 'function' && typeof entry.name === 'string') {
|
|
47
|
+
if (REFS.has(entry.name)) out[entry.name] = entry.handler;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const cfg = config && typeof config === 'object' && 'default' in config ? config.default : config;
|
|
55
|
+
export const functions = collect(cfg);
|
|
56
|
+
export const meta = {
|
|
57
|
+
builtAt: new Date().toISOString(),
|
|
58
|
+
refCount: ${refs.length},
|
|
59
|
+
};
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
export async function buildRuntimeBundle(opts) {
|
|
63
|
+
const { sourceConfigPath, refs, outputDir } = opts;
|
|
64
|
+
const baseName = opts.baseName ?? DEFAULT_BASE;
|
|
65
|
+
if (!existsSync(outputDir))
|
|
66
|
+
mkdirSync(outputDir, { recursive: true });
|
|
67
|
+
const entryDir = dirname(sourceConfigPath);
|
|
68
|
+
const entryPath = resolvePath(entryDir, `.${baseName}.entry.${process.pid}.${Date.now()}.mjs`);
|
|
69
|
+
writeFileSync(entryPath, generateEntrySource(sourceConfigPath, refs, entryDir));
|
|
70
|
+
let esbuild;
|
|
71
|
+
try {
|
|
72
|
+
esbuild = await import('esbuild');
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
try {
|
|
76
|
+
unlinkSync(entryPath);
|
|
77
|
+
}
|
|
78
|
+
catch { /* noop */ }
|
|
79
|
+
throw new Error(`[build-runtime] esbuild is required to bundle declarative handlers but is not installed: ${err.message}`);
|
|
80
|
+
}
|
|
81
|
+
// Bundle to an in-memory buffer first so we can hash, then rename.
|
|
82
|
+
let result;
|
|
83
|
+
try {
|
|
84
|
+
result = await esbuild.build({
|
|
85
|
+
entryPoints: [entryPath],
|
|
86
|
+
bundle: true,
|
|
87
|
+
format: 'esm',
|
|
88
|
+
platform: 'node',
|
|
89
|
+
target: 'node18',
|
|
90
|
+
write: false,
|
|
91
|
+
sourcemap: 'inline',
|
|
92
|
+
packages: 'external',
|
|
93
|
+
logLevel: 'silent',
|
|
94
|
+
legalComments: 'none',
|
|
95
|
+
resolveExtensions: ['.ts', '.tsx', '.mjs', '.js', '.cjs', '.json'],
|
|
96
|
+
loader: { '.ts': 'ts', '.tsx': 'tsx' },
|
|
97
|
+
banner: { js: '// @generated by @objectstack/cli — do not edit.' },
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
try {
|
|
102
|
+
unlinkSync(entryPath);
|
|
103
|
+
}
|
|
104
|
+
catch { /* noop */ }
|
|
105
|
+
}
|
|
106
|
+
const out = result.outputFiles?.[0];
|
|
107
|
+
if (!out)
|
|
108
|
+
throw new Error('[build-runtime] esbuild produced no output');
|
|
109
|
+
const code = out.text;
|
|
110
|
+
const hash = createHash('sha256').update(code).digest('hex').slice(0, 16);
|
|
111
|
+
const fileName = `${baseName}.${hash}.mjs`;
|
|
112
|
+
const outputPath = resolvePath(outputDir, fileName);
|
|
113
|
+
writeFileSync(outputPath, code);
|
|
114
|
+
return {
|
|
115
|
+
outputPath,
|
|
116
|
+
outputFileName: fileName,
|
|
117
|
+
hash,
|
|
118
|
+
size: Buffer.byteLength(code, 'utf8'),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Best-effort cleanup of stale `objectstack-runtime.*.mjs` files. */
|
|
122
|
+
export function cleanupOldRuntimeBundles(outputDir, keepFileName, baseName = DEFAULT_BASE) {
|
|
123
|
+
if (!existsSync(outputDir))
|
|
124
|
+
return 0;
|
|
125
|
+
let removed = 0;
|
|
126
|
+
try {
|
|
127
|
+
const re = new RegExp(`^${baseName}\\.[a-f0-9]+\\.mjs(\\.map)?$`);
|
|
128
|
+
for (const f of readdirSync(outputDir)) {
|
|
129
|
+
if (!re.test(f))
|
|
130
|
+
continue;
|
|
131
|
+
if (f === keepFileName)
|
|
132
|
+
continue;
|
|
133
|
+
try {
|
|
134
|
+
unlinkSync(resolvePath(outputDir, f));
|
|
135
|
+
removed += 1;
|
|
136
|
+
}
|
|
137
|
+
catch { /* noop */ }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch { /* noop */ }
|
|
141
|
+
return removed;
|
|
142
|
+
}
|
|
143
|
+
/** Reuse: read an existing bundle and recompute its size for stats. */
|
|
144
|
+
export function statBundle(outputPath) {
|
|
145
|
+
try {
|
|
146
|
+
const buf = readFileSync(outputPath);
|
|
147
|
+
return { size: buf.byteLength };
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export const runtimeBundlePathRelative = (outputDir, file) => relative(outputDir, resolvePath(outputDir, basename(file)));
|
|
154
|
+
//# sourceMappingURL=build-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-runtime.js","sourceRoot":"","sources":["../../src/utils/build-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BzD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA6BzD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiCvE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAgC,GAAG,OAAO,CAE5E"}
|
package/dist/utils/config.js
CHANGED
|
@@ -47,10 +47,25 @@ export async function loadConfig(source) {
|
|
|
47
47
|
const { mod } = await bundleRequire({
|
|
48
48
|
filepath: absolutePath,
|
|
49
49
|
});
|
|
50
|
-
const
|
|
51
|
-
if (!
|
|
50
|
+
const baseConfig = mod.default || mod;
|
|
51
|
+
if (!baseConfig) {
|
|
52
52
|
throw new Error(`No default export found in ${path.basename(absolutePath)}`);
|
|
53
53
|
}
|
|
54
|
+
// Preserve named exports (e.g. `onEnable`, `onDisable` lifecycle hooks)
|
|
55
|
+
// alongside the default-exported stack. Module-namespace named exports are
|
|
56
|
+
// otherwise dropped when we unwrap `mod.default`, which prevents AppPlugin
|
|
57
|
+
// from invoking runtime hooks.
|
|
58
|
+
const config = (baseConfig === mod || mod.default == null)
|
|
59
|
+
? baseConfig
|
|
60
|
+
: (() => {
|
|
61
|
+
const merged = { ...baseConfig };
|
|
62
|
+
for (const key of Object.keys(mod)) {
|
|
63
|
+
if (key === 'default' || key in merged)
|
|
64
|
+
continue;
|
|
65
|
+
merged[key] = mod[key];
|
|
66
|
+
}
|
|
67
|
+
return merged;
|
|
68
|
+
})();
|
|
54
69
|
return {
|
|
55
70
|
config,
|
|
56
71
|
absolutePath,
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,0BAA0B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;YAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG;QACjB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;KACzB,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,8DAA8D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAe;IAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,CAAC;QAClC,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;IAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** URL mount path for the Console portal inside the ObjectStack server */
|
|
2
|
+
export declare const CONSOLE_PATH = "/_console";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the filesystem path to the @objectstack/console package.
|
|
5
|
+
* Searches workspace locations first, then falls back to node_modules.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveConsolePath(): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Check whether the Console portal has a pre-built `dist/` directory.
|
|
10
|
+
*/
|
|
11
|
+
export declare function hasConsoleDist(consolePath: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Create a lightweight kernel plugin that serves the pre-built Console
|
|
14
|
+
* portal static files at `/_console/*`.
|
|
15
|
+
*
|
|
16
|
+
* Identical SPA-fallback semantics to `createStudioStaticPlugin` and
|
|
17
|
+
* `createAccountStaticPlugin`:
|
|
18
|
+
* - `index.html` is read fresh on every fallback hit (so a rebuild
|
|
19
|
+
* producing new hashed asset names doesn't leave the browser
|
|
20
|
+
* pointing at stale URLs).
|
|
21
|
+
* - Hashed asset paths under `/_console/assets/*` never SPA-fallback —
|
|
22
|
+
* a real 404 surfaces a rebuild/deploy mismatch instead of the
|
|
23
|
+
* dreaded "asset returns text/html" silent failure.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createConsoleStaticPlugin(distPath: string, options?: {
|
|
26
|
+
isDev?: boolean;
|
|
27
|
+
}): {
|
|
28
|
+
name: string;
|
|
29
|
+
init: () => Promise<void>;
|
|
30
|
+
start: (ctx: any) => Promise<void>;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/utils/console.ts"],"names":[],"mappings":"AAwBA,0EAA0E;AAC1E,eAAO,MAAM,YAAY,cAAc,CAAC;AAIxC;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CA6ClD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE3D;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;;;iBAMlE,GAAG;EA6DzB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
/**
|
|
3
|
+
* Console UI Integration Utilities
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `studio.ts` / `account.ts` but for the opinionated, fork-ready
|
|
6
|
+
* runtime console (`@objectstack/console`). The Console SPA is mounted at
|
|
7
|
+
* `/_console/` by every deployment that opts in (CLI dev server,
|
|
8
|
+
* self-host, Vercel) — exactly the same convention as `_studio` and
|
|
9
|
+
* `_account`. The Console is built with `base: '/_console/'`, so its
|
|
10
|
+
* pre-built `dist/` is served verbatim.
|
|
11
|
+
*
|
|
12
|
+
* Note: this module was previously named `dashboard.ts` (and the SPA was
|
|
13
|
+
* `apps/dashboard`). It was renamed to disambiguate from the spec-level
|
|
14
|
+
* `Dashboard` metadata type — the Console *renders* dashboards, it is not
|
|
15
|
+
* itself a dashboard.
|
|
16
|
+
*/
|
|
17
|
+
import path from 'path';
|
|
18
|
+
import fs from 'fs';
|
|
19
|
+
import { createRequire } from 'module';
|
|
20
|
+
import { pathToFileURL } from 'url';
|
|
21
|
+
// ─── Constants ──────────────────────────────────────────────────────
|
|
22
|
+
/** URL mount path for the Console portal inside the ObjectStack server */
|
|
23
|
+
export const CONSOLE_PATH = '/_console';
|
|
24
|
+
// ─── Path Resolution ────────────────────────────────────────────────
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the filesystem path to the @objectstack/console package.
|
|
27
|
+
* Searches workspace locations first, then falls back to node_modules.
|
|
28
|
+
*/
|
|
29
|
+
export function resolveConsolePath() {
|
|
30
|
+
const cwd = process.cwd();
|
|
31
|
+
// Workspace candidates (monorepo layouts)
|
|
32
|
+
const candidates = [
|
|
33
|
+
path.resolve(cwd, 'apps/console'),
|
|
34
|
+
path.resolve(cwd, '../../apps/console'),
|
|
35
|
+
path.resolve(cwd, '../apps/console'),
|
|
36
|
+
];
|
|
37
|
+
for (const candidate of candidates) {
|
|
38
|
+
const pkgPath = path.join(candidate, 'package.json');
|
|
39
|
+
if (fs.existsSync(pkgPath)) {
|
|
40
|
+
try {
|
|
41
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
42
|
+
if (pkg.name === '@objectstack/console')
|
|
43
|
+
return candidate;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Skip invalid package.json
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Fallback: resolve from node_modules via createRequire.
|
|
51
|
+
const resolutionBases = [
|
|
52
|
+
pathToFileURL(path.join(cwd, 'package.json')).href, // consumer workspace
|
|
53
|
+
import.meta.url, // CLI package itself
|
|
54
|
+
];
|
|
55
|
+
for (const base of resolutionBases) {
|
|
56
|
+
try {
|
|
57
|
+
const req = createRequire(base);
|
|
58
|
+
const resolved = req.resolve('@objectstack/console/package.json');
|
|
59
|
+
return path.dirname(resolved);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Not resolvable from this base — try next
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Last resort: direct filesystem check in cwd/node_modules
|
|
66
|
+
const directPath = path.join(cwd, 'node_modules', '@objectstack', 'console');
|
|
67
|
+
if (fs.existsSync(path.join(directPath, 'package.json'))) {
|
|
68
|
+
return directPath;
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check whether the Console portal has a pre-built `dist/` directory.
|
|
74
|
+
*/
|
|
75
|
+
export function hasConsoleDist(consolePath) {
|
|
76
|
+
return fs.existsSync(path.join(consolePath, 'dist', 'index.html'));
|
|
77
|
+
}
|
|
78
|
+
// ─── Plugin Factory ─────────────────────────────────────────────────
|
|
79
|
+
/**
|
|
80
|
+
* Create a lightweight kernel plugin that serves the pre-built Console
|
|
81
|
+
* portal static files at `/_console/*`.
|
|
82
|
+
*
|
|
83
|
+
* Identical SPA-fallback semantics to `createStudioStaticPlugin` and
|
|
84
|
+
* `createAccountStaticPlugin`:
|
|
85
|
+
* - `index.html` is read fresh on every fallback hit (so a rebuild
|
|
86
|
+
* producing new hashed asset names doesn't leave the browser
|
|
87
|
+
* pointing at stale URLs).
|
|
88
|
+
* - Hashed asset paths under `/_console/assets/*` never SPA-fallback —
|
|
89
|
+
* a real 404 surfaces a rebuild/deploy mismatch instead of the
|
|
90
|
+
* dreaded "asset returns text/html" silent failure.
|
|
91
|
+
*/
|
|
92
|
+
export function createConsoleStaticPlugin(distPath, options) {
|
|
93
|
+
return {
|
|
94
|
+
name: 'com.objectstack.console-static',
|
|
95
|
+
init: async () => { },
|
|
96
|
+
start: async (ctx) => {
|
|
97
|
+
const httpServer = ctx.getService?.('http.server');
|
|
98
|
+
if (!httpServer?.getRawApp) {
|
|
99
|
+
ctx.logger?.warn?.('Console static: http.server service not found — skipping');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const app = httpServer.getRawApp();
|
|
103
|
+
const absoluteDist = path.resolve(distPath);
|
|
104
|
+
const indexPath = path.join(absoluteDist, 'index.html');
|
|
105
|
+
if (!fs.existsSync(indexPath)) {
|
|
106
|
+
ctx.logger?.warn?.(`Console static: dist not found at ${absoluteDist}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const readIndexHtml = () => fs.readFileSync(indexPath, 'utf-8');
|
|
110
|
+
// In dev mode, the Console is the default UI surface — root `/`
|
|
111
|
+
// redirects here. Mirrors the convention Studio used to own; we now
|
|
112
|
+
// prefer the Console because it is the opinionated end-user surface.
|
|
113
|
+
if (options?.isDev) {
|
|
114
|
+
app.get('/', (c) => c.redirect(`${CONSOLE_PATH}/`));
|
|
115
|
+
}
|
|
116
|
+
// Redirect bare path to trailing-slash (SPA convention)
|
|
117
|
+
app.get(CONSOLE_PATH, (c) => c.redirect(`${CONSOLE_PATH}/`));
|
|
118
|
+
// Serve static files with SPA fallback
|
|
119
|
+
app.get(`${CONSOLE_PATH}/*`, async (c) => {
|
|
120
|
+
const reqPath = c.req.path.substring(CONSOLE_PATH.length) || '/';
|
|
121
|
+
const filePath = path.join(absoluteDist, reqPath);
|
|
122
|
+
// Security: prevent path traversal
|
|
123
|
+
if (!filePath.startsWith(absoluteDist)) {
|
|
124
|
+
return c.text('Forbidden', 403);
|
|
125
|
+
}
|
|
126
|
+
// Try serving the exact file
|
|
127
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
|
|
128
|
+
const content = fs.readFileSync(filePath);
|
|
129
|
+
return new Response(content, {
|
|
130
|
+
headers: { 'content-type': mimeType(filePath) },
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Hashed-asset paths must never SPA-fallback.
|
|
134
|
+
if (reqPath.startsWith('/assets/')) {
|
|
135
|
+
return c.text('Not Found', 404);
|
|
136
|
+
}
|
|
137
|
+
// SPA fallback
|
|
138
|
+
return new Response(readIndexHtml(), {
|
|
139
|
+
headers: { 'content-type': 'text/html; charset=utf-8' },
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
// Suppress unused-parameter lint when isDev isn't needed.
|
|
143
|
+
void options;
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// ─── Helpers ────────────────────────────────────────────────────────
|
|
148
|
+
const MIME_TYPES = {
|
|
149
|
+
'.html': 'text/html; charset=utf-8',
|
|
150
|
+
'.js': 'application/javascript; charset=utf-8',
|
|
151
|
+
'.mjs': 'application/javascript; charset=utf-8',
|
|
152
|
+
'.css': 'text/css; charset=utf-8',
|
|
153
|
+
'.json': 'application/json; charset=utf-8',
|
|
154
|
+
'.svg': 'image/svg+xml',
|
|
155
|
+
'.png': 'image/png',
|
|
156
|
+
'.jpg': 'image/jpeg',
|
|
157
|
+
'.jpeg': 'image/jpeg',
|
|
158
|
+
'.gif': 'image/gif',
|
|
159
|
+
'.ico': 'image/x-icon',
|
|
160
|
+
'.woff': 'font/woff',
|
|
161
|
+
'.woff2': 'font/woff2',
|
|
162
|
+
'.ttf': 'font/ttf',
|
|
163
|
+
'.map': 'application/json',
|
|
164
|
+
};
|
|
165
|
+
function mimeType(filePath) {
|
|
166
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
167
|
+
return MIME_TYPES[ext] || 'application/octet-stream';
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/utils/console.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ExtractedBody {
|
|
2
|
+
/** Pure function-body source (without the surrounding `(ctx) => {...}`). */
|
|
3
|
+
source: string;
|
|
4
|
+
/** Inferred capability tokens — may be merged with explicit `// @capabilities` line. */
|
|
5
|
+
capabilities: Array<'api.read' | 'api.write' | 'crypto.uuid' | 'crypto.hash' | 'log'>;
|
|
6
|
+
/** True when source is a single expression (arrow with implicit return). */
|
|
7
|
+
isExpression: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Extract the body source from a callable. Throws on forbidden patterns.
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractHookBody(fn: (...a: unknown[]) => unknown, originLabel: string): ExtractedBody;
|
|
13
|
+
//# sourceMappingURL=extract-hook-body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-hook-body.d.ts","sourceRoot":"","sources":["../../src/utils/extract-hook-body.ts"],"names":[],"mappings":"AAgDA,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,YAAY,EAAE,KAAK,CAAC,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;IACtF,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAmDpG"}
|