@thatopen/services 0.8.0 → 0.9.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.
Files changed (70) hide show
  1. package/README.md +62 -62
  2. package/dist/built-in/index.d.ts +66 -41
  3. package/dist/cli.js +31 -12
  4. package/dist/core/client.d.ts +6 -0
  5. package/dist/core/platform-client.d.ts +139 -0
  6. package/dist/core/platform-client.live.test.d.ts +1 -0
  7. package/dist/core/platform-client.notifications.test.d.ts +1 -0
  8. package/dist/index.cjs.js +2 -2
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.es.js +635 -445
  11. package/dist/types/notifications.d.ts +54 -0
  12. package/dist/vite-env.d.ts +1 -1
  13. package/docs/cli/create.md +29 -29
  14. package/docs/cli/local-server.md +38 -38
  15. package/docs/cli/login.md +32 -32
  16. package/docs/cli/publish.md +31 -31
  17. package/docs/cli/run.md +26 -26
  18. package/docs/cli/serve.md +43 -43
  19. package/docs/cli/swap.md +30 -30
  20. package/package.json +1 -1
  21. package/src/built-in/CDEManager/example.ts +214 -214
  22. package/src/built-in/CDEManager/examples/FileEditing/example.ts +226 -226
  23. package/src/built-in/CDEManager/examples/FileMoves/example.ts +186 -186
  24. package/src/built-in/CDEManager/examples/FileOperations/example.ts +295 -295
  25. package/src/built-in/CDEManager/examples/FileTransfers/example.ts +210 -210
  26. package/src/built-in/CDEManager/examples/FolderManagement/example.ts +230 -230
  27. package/src/built-in/CDEManager/examples/MetadataSchema/example.ts +230 -230
  28. package/src/built-in/CDEManager/examples/MetadataViews/example.ts +166 -166
  29. package/src/built-in/CDEManager/examples/ProjectConfig/example.ts +177 -177
  30. package/src/built-in/UIManager/src/app/example.ts +97 -97
  31. package/src/built-in/UIManager/src/app/examples/AppState/example.ts +140 -140
  32. package/src/built-in/UIManager/src/app/examples/Banner/example.ts +159 -159
  33. package/src/built-in/UIManager/src/app/examples/Contexts/example.ts +123 -123
  34. package/src/built-in/UIManager/src/app/examples/FileDrop/example.ts +124 -124
  35. package/src/built-in/UIManager/src/app/examples/FloatingLayout/example.ts +90 -90
  36. package/src/built-in/UIManager/src/app/examples/Modal/example.ts +163 -163
  37. package/src/built-in/UIManager/src/app/examples/Notifications/example.ts +133 -133
  38. package/src/built-in/UIManager/src/app/examples/ProjectFileStorage/example.ts +150 -150
  39. package/src/built-in/UIManager/src/app/examples/Sidebar/example.ts +102 -102
  40. package/src/built-in/UIManager/src/clashes-panel/example.ts +183 -183
  41. package/src/built-in/UIManager/src/git-history-panel/example.ts +70 -70
  42. package/src/built-in/UIManager/src/models-list/example.ts +122 -122
  43. package/src/built-in/UIManager/src/topics-panel/example.ts +170 -170
  44. package/src/built-in/index.ts +66 -41
  45. package/src/cli/templates/app/index.html +35 -35
  46. package/src/cli/templates/app/package.json +32 -32
  47. package/src/cli/templates/app/src/bim-components/CloudRunner/index.ts +95 -95
  48. package/src/cli/templates/app/src/bim-components/CloudRunner/src/index.ts +1 -1
  49. package/src/cli/templates/app/src/bim-components/CloudRunner/src/types.ts +5 -5
  50. package/src/cli/templates/app/src/bim-components/index.ts +1 -1
  51. package/src/cli/templates/app/src/globals.ts +1 -1
  52. package/src/cli/templates/app/src/ui-components/app-info-section/index.ts +26 -26
  53. package/src/cli/templates/app/src/ui-components/app-info-section/src/index.ts +1 -1
  54. package/src/cli/templates/app/src/ui-components/app-info-section/src/types.ts +15 -15
  55. package/src/cli/templates/app/src/ui-components/cloud-runner-section/index.ts +37 -37
  56. package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/index.ts +1 -1
  57. package/src/cli/templates/app/src/ui-components/cloud-runner-section/src/types.ts +14 -14
  58. package/src/cli/templates/app/src/ui-components/index.ts +2 -2
  59. package/src/cli/templates/app/tsconfig.json +16 -16
  60. package/src/cli/templates/app/vite.config.js +57 -57
  61. package/src/cli/templates/cloud-component/README.md +205 -205
  62. package/src/cli/templates/cloud-component/_thatopen +5 -5
  63. package/src/cli/templates/cloud-component/declarations.json +4 -4
  64. package/src/cli/templates/cloud-component/package.json +21 -21
  65. package/src/cli/templates/cloud-component/src/main.ts +70 -70
  66. package/src/cli/templates/cloud-component/tsconfig.json +16 -16
  67. package/src/cli/templates/cloud-component/vite.config.js +46 -46
  68. package/src/cli/templates/shared/AGENTS.md +8 -8
  69. package/src/cli/templates/shared/CLAUDE.md +1 -1
  70. 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