@thatopen/services 0.3.15 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -62
- package/dist/built-in/index.d.ts +165 -2
- package/dist/cli.js +27 -13
- package/dist/core/client.d.ts +1 -0
- package/dist/core/platform-client.d.ts +7 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.es.js +396 -374
- package/dist/vite-env.d.ts +1 -1
- package/docs/builtin/paths.json +94 -86
- package/docs/cli/create.md +29 -29
- package/docs/cli/local-server.md +38 -38
- package/docs/cli/login.md +32 -32
- package/docs/cli/publish.md +31 -31
- package/docs/cli/run.md +26 -26
- package/docs/cli/serve.md +43 -43
- package/docs/cli/swap.md +30 -30
- package/package.json +4 -4
- package/resources/AGENTS.md +40 -40
- package/src/built-in/CDEManager/example.ts +214 -214
- package/src/built-in/CDEManager/examples/FileEditing/example.ts +226 -226
- package/src/built-in/CDEManager/examples/FileMoves/example.ts +186 -186
- package/src/built-in/CDEManager/examples/FileOperations/example.ts +295 -295
- package/src/built-in/CDEManager/examples/FileTransfers/example.ts +210 -210
- package/src/built-in/CDEManager/examples/FolderManagement/example.ts +230 -230
- package/src/built-in/CDEManager/examples/MetadataSchema/example.ts +230 -230
- package/src/built-in/CDEManager/examples/MetadataViews/example.ts +166 -166
- package/src/built-in/CDEManager/examples/ProjectConfig/example.ts +177 -177
- package/src/built-in/ClashesManager/example.ts +283 -283
- package/src/built-in/UIManager/src/app/example.ts +97 -97
- package/src/built-in/UIManager/src/app/examples/AppState/example.ts +140 -140
- package/src/built-in/UIManager/src/app/examples/Banner/example.ts +159 -159
- package/src/built-in/UIManager/src/app/examples/Contexts/example.ts +123 -123
- package/src/built-in/UIManager/src/app/examples/FileDrop/example.ts +124 -124
- package/src/built-in/UIManager/src/app/examples/FloatingLayout/example.ts +90 -90
- package/src/built-in/UIManager/src/app/examples/Modal/example.ts +163 -163
- package/src/built-in/UIManager/src/app/examples/Notifications/example.ts +133 -133
- package/src/built-in/UIManager/src/app/examples/ProjectFileStorage/example.ts +150 -0
- package/src/built-in/UIManager/src/app/examples/Sidebar/example.ts +102 -102
- package/src/built-in/UIManager/src/clashes-panel/example.ts +183 -160
- package/src/built-in/UIManager/src/models-list/example.ts +122 -122
- package/src/built-in/UIManager/src/topics-panel/example.ts +170 -0
- package/src/built-in/index.ts +1048 -881
- package/src/cli/templates/app/index.html +35 -35
- package/src/cli/templates/app/package.json +32 -32
- package/src/cli/templates/app/src/bim-components/CloudRunner/index.ts +95 -95
- package/src/cli/templates/app/src/bim-components/CloudRunner/src/index.ts +1 -1
- package/src/cli/templates/app/src/bim-components/CloudRunner/src/types.ts +5 -5
- package/src/cli/templates/app/src/bim-components/index.ts +1 -1
- package/src/cli/templates/app/src/globals.ts +1 -1
- package/src/cli/templates/app/src/ui-components/app-info-section/index.ts +26 -26
- package/src/cli/templates/app/src/ui-components/app-info-section/src/index.ts +1 -1
- package/src/cli/templates/app/src/ui-components/app-info-section/src/types.ts +15 -15
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/index.ts +37 -37
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/index.ts +1 -1
- package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/types.ts +14 -14
- package/src/cli/templates/app/src/ui-components/index.ts +2 -2
- package/src/cli/templates/app/tsconfig.json +16 -16
- package/src/cli/templates/app/vite.config.js +57 -57
- package/src/cli/templates/cloud-component/README.md +205 -205
- package/src/cli/templates/cloud-component/_thatopen +5 -5
- package/src/cli/templates/cloud-component/declarations.json +4 -4
- package/src/cli/templates/cloud-component/package.json +21 -21
- package/src/cli/templates/cloud-component/src/main.ts +70 -70
- package/src/cli/templates/cloud-component/tsconfig.json +16 -16
- package/src/cli/templates/cloud-component/vite.config.js +46 -46
- package/src/cli/templates/shared/AGENTS.md +8 -8
- package/src/cli/templates/shared/CLAUDE.md +1 -1
- package/src/cli/templates/shared/_gitignore +5 -5
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
// Cloud Component Entry Point
|
|
2
|
-
//
|
|
3
|
-
// Your component runs on the server as a Node.js process.
|
|
4
|
-
// The execution engine provides these globals — do NOT import them:
|
|
5
|
-
//
|
|
6
|
-
// thatOpenServices — pre-authenticated EngineServicesClient
|
|
7
|
-
// executionParams — parameters passed by the caller (shape defined in ../declarations.json)
|
|
8
|
-
// executionContext — platform-supplied run context: { projectId?, executionId, toolId, toolVersion }
|
|
9
|
-
// Use executionContext.projectId to scope uploads/lookups to the launching project.
|
|
10
|
-
// Undefined when the component is run outside a project context.
|
|
11
|
-
// executionReporter — { message(msg), error(msg), progress(pct) } for live feedback
|
|
12
|
-
//
|
|
13
|
-
// Parameters are declared in `declarations.json` at the project root. That
|
|
14
|
-
// file is bundled alongside this code at publish time so the platform (and
|
|
15
|
-
// the CLI's `thatopen run`) knows which parameters the component accepts
|
|
16
|
-
// and their types. Whenever you add, remove, or rename a parameter in this
|
|
17
|
-
// file you MUST update `declarations.json` to match — `thatopen publish`
|
|
18
|
-
// fails if they drift.
|
|
19
|
-
//
|
|
20
|
-
// Return value — must be { type, message }:
|
|
21
|
-
// type: "SUCCESS" | "FAIL" | "WARNING"
|
|
22
|
-
|
|
23
|
-
// Globals injected by the execution engine at runtime — keep these for type checking
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
-
declare const thatOpenServices: import("@thatopen/services").EngineServicesClient;
|
|
26
|
-
declare const executionParams: Record<string, unknown>;
|
|
27
|
-
declare const executionContext: {
|
|
28
|
-
projectId?: string;
|
|
29
|
-
executionId: string;
|
|
30
|
-
toolId: string;
|
|
31
|
-
toolVersion: string;
|
|
32
|
-
};
|
|
33
|
-
declare const executionReporter: {
|
|
34
|
-
message(msg: string): void;
|
|
35
|
-
error(msg: string): void;
|
|
36
|
-
progress(pct: number): void;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export async function main() {
|
|
40
|
-
const projectName = executionParams.projectName as string | undefined;
|
|
41
|
-
const iterations = Number(executionParams.iterations);
|
|
42
|
-
|
|
43
|
-
executionReporter.message(
|
|
44
|
-
`Starting for "${projectName ?? "(unnamed)"}"`,
|
|
45
|
-
);
|
|
46
|
-
executionReporter.message(`Will run ${iterations} iteration(s)`);
|
|
47
|
-
if (executionContext?.projectId) {
|
|
48
|
-
executionReporter.message(`Scoped to project ${executionContext.projectId}`);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (!projectName) {
|
|
52
|
-
return { type: "FAIL", message: "projectName parameter is required" };
|
|
53
|
-
}
|
|
54
|
-
if (!Number.isFinite(iterations) || iterations <= 0) {
|
|
55
|
-
return { type: "FAIL", message: "iterations must be a positive number" };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
for (let i = 1; i <= iterations; i++) {
|
|
59
|
-
executionReporter.message(`Iteration ${i} of ${iterations}`);
|
|
60
|
-
executionReporter.progress(Math.round((i / iterations) * 100));
|
|
61
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
executionReporter.message("All iterations completed");
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
type: "SUCCESS",
|
|
68
|
-
message: `Processed "${projectName}" across ${iterations} iteration(s)`,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
1
|
+
// Cloud Component Entry Point
|
|
2
|
+
//
|
|
3
|
+
// Your component runs on the server as a Node.js process.
|
|
4
|
+
// The execution engine provides these globals — do NOT import them:
|
|
5
|
+
//
|
|
6
|
+
// thatOpenServices — pre-authenticated EngineServicesClient
|
|
7
|
+
// executionParams — parameters passed by the caller (shape defined in ../declarations.json)
|
|
8
|
+
// executionContext — platform-supplied run context: { projectId?, executionId, toolId, toolVersion }
|
|
9
|
+
// Use executionContext.projectId to scope uploads/lookups to the launching project.
|
|
10
|
+
// Undefined when the component is run outside a project context.
|
|
11
|
+
// executionReporter — { message(msg), error(msg), progress(pct) } for live feedback
|
|
12
|
+
//
|
|
13
|
+
// Parameters are declared in `declarations.json` at the project root. That
|
|
14
|
+
// file is bundled alongside this code at publish time so the platform (and
|
|
15
|
+
// the CLI's `thatopen run`) knows which parameters the component accepts
|
|
16
|
+
// and their types. Whenever you add, remove, or rename a parameter in this
|
|
17
|
+
// file you MUST update `declarations.json` to match — `thatopen publish`
|
|
18
|
+
// fails if they drift.
|
|
19
|
+
//
|
|
20
|
+
// Return value — must be { type, message }:
|
|
21
|
+
// type: "SUCCESS" | "FAIL" | "WARNING"
|
|
22
|
+
|
|
23
|
+
// Globals injected by the execution engine at runtime — keep these for type checking
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
+
declare const thatOpenServices: import("@thatopen/services").EngineServicesClient;
|
|
26
|
+
declare const executionParams: Record<string, unknown>;
|
|
27
|
+
declare const executionContext: {
|
|
28
|
+
projectId?: string;
|
|
29
|
+
executionId: string;
|
|
30
|
+
toolId: string;
|
|
31
|
+
toolVersion: string;
|
|
32
|
+
};
|
|
33
|
+
declare const executionReporter: {
|
|
34
|
+
message(msg: string): void;
|
|
35
|
+
error(msg: string): void;
|
|
36
|
+
progress(pct: number): void;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export async function main() {
|
|
40
|
+
const projectName = executionParams.projectName as string | undefined;
|
|
41
|
+
const iterations = Number(executionParams.iterations);
|
|
42
|
+
|
|
43
|
+
executionReporter.message(
|
|
44
|
+
`Starting for "${projectName ?? "(unnamed)"}"`,
|
|
45
|
+
);
|
|
46
|
+
executionReporter.message(`Will run ${iterations} iteration(s)`);
|
|
47
|
+
if (executionContext?.projectId) {
|
|
48
|
+
executionReporter.message(`Scoped to project ${executionContext.projectId}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (!projectName) {
|
|
52
|
+
return { type: "FAIL", message: "projectName parameter is required" };
|
|
53
|
+
}
|
|
54
|
+
if (!Number.isFinite(iterations) || iterations <= 0) {
|
|
55
|
+
return { type: "FAIL", message: "iterations must be a positive number" };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
for (let i = 1; i <= iterations; i++) {
|
|
59
|
+
executionReporter.message(`Iteration ${i} of ${iterations}`);
|
|
60
|
+
executionReporter.progress(Math.round((i / iterations) * 100));
|
|
61
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
executionReporter.message("All iterations completed");
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
type: "SUCCESS",
|
|
68
|
+
message: `Processed "${projectName}" across ${iterations} iteration(s)`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"lib": ["ES2020"],
|
|
6
|
-
"skipLibCheck": true,
|
|
7
|
-
"esModuleInterop": true,
|
|
8
|
-
"moduleResolution": "bundler",
|
|
9
|
-
"allowImportingTsExtensions": true,
|
|
10
|
-
"resolveJsonModule": true,
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"noEmit": true,
|
|
13
|
-
"strict": true
|
|
14
|
-
},
|
|
15
|
-
"include": ["src"]
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"isolatedModules": true,
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"strict": true
|
|
14
|
+
},
|
|
15
|
+
"include": ["src"]
|
|
16
|
+
}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
// Production build config — builds dist/bundle.js as IIFE.
|
|
2
|
-
// For local development, use: npm run dev (runs thatopen serve with esbuild).
|
|
3
|
-
// Do NOT run "vite" or "vite build --watch" directly for dev.
|
|
4
|
-
import { defineConfig } from 'vite';
|
|
5
|
-
import { resolve } from 'path';
|
|
6
|
-
import { existsSync, readFileSync } from 'fs';
|
|
7
|
-
|
|
8
|
-
function getBetaAliases() {
|
|
9
|
-
if (!existsSync('.thatopen')) return {};
|
|
10
|
-
try {
|
|
11
|
-
const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
|
|
12
|
-
if (!config.beta) return {};
|
|
13
|
-
return {
|
|
14
|
-
'@thatopen/components': '@thatopen-platform/components-beta',
|
|
15
|
-
'@thatopen/components-front': '@thatopen-platform/components-front-beta',
|
|
16
|
-
'@thatopen/fragments': '@thatopen-platform/fragments-beta',
|
|
17
|
-
};
|
|
18
|
-
} catch {
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default defineConfig({
|
|
24
|
-
resolve: {
|
|
25
|
-
alias: getBetaAliases(),
|
|
26
|
-
},
|
|
27
|
-
build: {
|
|
28
|
-
lib: {
|
|
29
|
-
entry: resolve(__dirname, 'src/main.ts'),
|
|
30
|
-
name: 'ThatOpenComponent',
|
|
31
|
-
formats: ['iife'],
|
|
32
|
-
fileName: () => 'bundle.js',
|
|
33
|
-
},
|
|
34
|
-
outDir: 'dist',
|
|
35
|
-
rollupOptions: {
|
|
36
|
-
// Only @thatopen/services is externalized — the execution wrapper
|
|
37
|
-
// provides it at runtime via require('@thatopen/services'). Every
|
|
38
|
-
// other dependency (including @thatopen/components, three, web-ifc,
|
|
39
|
-
// or any npm package you install) must be bundled into bundle.js.
|
|
40
|
-
external: ['@thatopen/services'],
|
|
41
|
-
output: {
|
|
42
|
-
footer: 'var main = ThatOpenComponent.main;',
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
});
|
|
1
|
+
// Production build config — builds dist/bundle.js as IIFE.
|
|
2
|
+
// For local development, use: npm run dev (runs thatopen serve with esbuild).
|
|
3
|
+
// Do NOT run "vite" or "vite build --watch" directly for dev.
|
|
4
|
+
import { defineConfig } from 'vite';
|
|
5
|
+
import { resolve } from 'path';
|
|
6
|
+
import { existsSync, readFileSync } from 'fs';
|
|
7
|
+
|
|
8
|
+
function getBetaAliases() {
|
|
9
|
+
if (!existsSync('.thatopen')) return {};
|
|
10
|
+
try {
|
|
11
|
+
const config = JSON.parse(readFileSync('.thatopen', 'utf-8'));
|
|
12
|
+
if (!config.beta) return {};
|
|
13
|
+
return {
|
|
14
|
+
'@thatopen/components': '@thatopen-platform/components-beta',
|
|
15
|
+
'@thatopen/components-front': '@thatopen-platform/components-front-beta',
|
|
16
|
+
'@thatopen/fragments': '@thatopen-platform/fragments-beta',
|
|
17
|
+
};
|
|
18
|
+
} catch {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default defineConfig({
|
|
24
|
+
resolve: {
|
|
25
|
+
alias: getBetaAliases(),
|
|
26
|
+
},
|
|
27
|
+
build: {
|
|
28
|
+
lib: {
|
|
29
|
+
entry: resolve(__dirname, 'src/main.ts'),
|
|
30
|
+
name: 'ThatOpenComponent',
|
|
31
|
+
formats: ['iife'],
|
|
32
|
+
fileName: () => 'bundle.js',
|
|
33
|
+
},
|
|
34
|
+
outDir: 'dist',
|
|
35
|
+
rollupOptions: {
|
|
36
|
+
// Only @thatopen/services is externalized — the execution wrapper
|
|
37
|
+
// provides it at runtime via require('@thatopen/services'). Every
|
|
38
|
+
// other dependency (including @thatopen/components, three, web-ifc,
|
|
39
|
+
// or any npm package you install) must be bundled into bundle.js.
|
|
40
|
+
external: ['@thatopen/services'],
|
|
41
|
+
output: {
|
|
42
|
+
footer: 'var main = ThatOpenComponent.main;',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# That Open Platform — Agent Guide
|
|
2
|
-
|
|
3
|
-
Read these two files before doing anything else:
|
|
4
|
-
|
|
5
|
-
1. `node_modules/@thatopen/services/resources/AGENTS.md` — rules, hard constraints, and the full navigation table for the That Open Platform. Always current for the installed library version.
|
|
6
|
-
2. `README.md` (this folder) — what this specific project is, its commands, architecture, and patterns.
|
|
7
|
-
|
|
8
|
-
If `node_modules/` doesn't exist yet, run `npm install` first or ask the user to do it.
|
|
1
|
+
# That Open Platform — Agent Guide
|
|
2
|
+
|
|
3
|
+
Read these two files before doing anything else:
|
|
4
|
+
|
|
5
|
+
1. `node_modules/@thatopen/services/resources/AGENTS.md` — rules, hard constraints, and the full navigation table for the That Open Platform. Always current for the installed library version.
|
|
6
|
+
2. `README.md` (this folder) — what this specific project is, its commands, architecture, and patterns.
|
|
7
|
+
|
|
8
|
+
If `node_modules/` doesn't exist yet, run `npm install` first or ask the user to do it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
See [AGENTS.md](./AGENTS.md).
|
|
1
|
+
See [AGENTS.md](./AGENTS.md).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
node_modules
|
|
2
|
-
dist
|
|
3
|
-
*.zip
|
|
4
|
-
.thatopen
|
|
5
|
-
.npmrc
|
|
1
|
+
node_modules
|
|
2
|
+
dist
|
|
3
|
+
*.zip
|
|
4
|
+
.thatopen
|
|
5
|
+
.npmrc
|