@fmsim/api 1.0.88 → 2.0.0-beta.110

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 (35) hide show
  1. package/custom-elements.json +674 -0
  2. package/dist/src/graphql/board.d.ts +7 -0
  3. package/dist/src/graphql/board.js +44 -0
  4. package/dist/src/graphql/board.js.map +1 -1
  5. package/dist/src/graphql/data-subscription.d.ts +9 -1
  6. package/dist/src/graphql/data-subscription.js +41 -4
  7. package/dist/src/graphql/data-subscription.js.map +1 -1
  8. package/dist/src/graphql/index.d.ts +1 -0
  9. package/dist/src/graphql/index.js +1 -0
  10. package/dist/src/graphql/index.js.map +1 -1
  11. package/dist/src/graphql/playback.d.ts +41 -0
  12. package/dist/src/graphql/playback.js +70 -0
  13. package/dist/src/graphql/playback.js.map +1 -0
  14. package/dist/src/index.d.ts +30 -0
  15. package/dist/src/index.js +72 -2
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/restful/authHeader.d.ts +1 -0
  18. package/dist/src/restful/authHeader.js +12 -1
  19. package/dist/src/restful/authHeader.js.map +1 -1
  20. package/dist/src/restful/board.d.ts +7 -0
  21. package/dist/src/restful/board.js +15 -0
  22. package/dist/src/restful/board.js.map +1 -1
  23. package/dist/src/restful/index.d.ts +1 -0
  24. package/dist/src/restful/index.js +1 -0
  25. package/dist/src/restful/index.js.map +1 -1
  26. package/dist/src/restful/machine.d.ts +25 -0
  27. package/dist/src/restful/machine.js +53 -0
  28. package/dist/src/restful/machine.js.map +1 -1
  29. package/dist/src/restful/playback.d.ts +38 -0
  30. package/dist/src/restful/playback.js +72 -0
  31. package/dist/src/restful/playback.js.map +1 -0
  32. package/dist/src/types.d.ts +9 -0
  33. package/dist/src/types.js.map +1 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +4 -6
@@ -1,5 +1,12 @@
1
1
  import { Board } from '../types';
2
2
  export declare function fetchBoardList(listParam?: any): Promise<any>;
3
+ export declare function fetchBoardNameById(id: string): Promise<string>;
4
+ /** 대표명 + 다국어(nameI18n) 를 함께 반환 — 표시 측에서 현재 언어로 resolve 하기 위함. */
5
+ export declare function fetchBoardNameInfoById(id: string): Promise<{
6
+ name?: string;
7
+ nameI18n?: string;
8
+ }>;
9
+ export declare function reorderBoard(id: string, prevId?: string, nextId?: string): Promise<any>;
3
10
  export declare function fetchBoardById(id: string, cachedUpdatedAt?: string): Promise<any>;
4
11
  export declare function createBoard(board: Board): Promise<any>;
5
12
  export declare function updateBoard(board: Board): Promise<any>;
@@ -10,6 +10,7 @@ export async function fetchBoardList(listParam = {}) {
10
10
  name
11
11
  description
12
12
  thumbnail
13
+ sortOrder
13
14
  createdAt
14
15
  updatedAt
15
16
  }
@@ -20,6 +21,49 @@ export async function fetchBoardList(listParam = {}) {
20
21
  });
21
22
  return response.data;
22
23
  }
24
+ export async function fetchBoardNameById(id) {
25
+ var _a;
26
+ const { data } = await client.query({
27
+ query: gql `
28
+ query FetchBoardName($id: String!) {
29
+ board(id: $id) {
30
+ id
31
+ name
32
+ }
33
+ }
34
+ `,
35
+ variables: { id }
36
+ });
37
+ return ((_a = data.board) === null || _a === void 0 ? void 0 : _a.name) || id;
38
+ }
39
+ /** 대표명 + 다국어(nameI18n) 를 함께 반환 — 표시 측에서 현재 언어로 resolve 하기 위함. */
40
+ export async function fetchBoardNameInfoById(id) {
41
+ var _a, _b;
42
+ const { data } = await client.query({
43
+ query: gql `
44
+ query FetchBoardNameInfo($id: String!) {
45
+ board(id: $id) {
46
+ id
47
+ name
48
+ nameI18n
49
+ }
50
+ }
51
+ `,
52
+ variables: { id }
53
+ });
54
+ return { name: (_a = data.board) === null || _a === void 0 ? void 0 : _a.name, nameI18n: (_b = data.board) === null || _b === void 0 ? void 0 : _b.nameI18n };
55
+ }
56
+ export async function reorderBoard(id, prevId, nextId) {
57
+ const response = await client.mutate({
58
+ mutation: gql `
59
+ mutation ReorderBoard($id: String!, $prevId: String, $nextId: String) {
60
+ reorderBoard(id: $id, prevId: $prevId, nextId: $nextId)
61
+ }
62
+ `,
63
+ variables: { id, prevId, nextId }
64
+ });
65
+ return response.data;
66
+ }
23
67
  export async function fetchBoardById(id, cachedUpdatedAt) {
24
68
  const response = await client.query({
25
69
  query: gql `
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/graphql/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,YAAiB,EAAE;IACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;iBAEG,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;KAYhC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,eAAwB;IACvE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCT;QACD,SAAS,EAAE;YACT,EAAE;YACF,eAAe;YACf,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAY;IAC5C;;;;;;;MAOE;IAEF,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;KAWZ;QACD,SAAS,EAAE;YACT,KAAK;SACN;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAY;IAC5C;;;;;;QAMI;IACJ,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACrD,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;KAeZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE;SAC7C;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAU;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;KAIZ;QACD,SAAS,EAAE;YACT,EAAE;SACH;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+BT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;KAC3B,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { buildArgs, client } from '@operato/graphql'\n\nimport { Board } from '../types'\nimport gql from 'graphql-tag'\n\nexport async function fetchBoardList(listParam: any = {}) {\n const response = await client.query({\n query: gql`\n {\n boards(${buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n const response = await client.query({\n query: gql`\n query FetchBoardById($id: String!, $cachedUpdatedAt: String, $filters: [Filter!]) {\n board(id: $id, cachedUpdatedAt: $cachedUpdatedAt) {\n id\n name\n description\n group {\n id\n name\n }\n thumbnail\n model\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n\n themes(filters: $filters) {\n items {\n name\n description\n active\n type\n value\n }\n }\n }\n `,\n variables: {\n id,\n cachedUpdatedAt,\n filters: [\n {\n name: 'active',\n operator: 'eq',\n value: true\n }\n ]\n }\n })\n\n return response.data\n}\n\nexport async function createBoard(board: Board) {\n /*\n input NewBoard {\n name : String!\n description : String\n model : String!\n groupId : String!\n }\n */\n\n board.model = JSON.stringify(board.model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBoard($board: NewBoard!) {\n createBoard(board: $board) {\n id\n name\n description\n model\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n board\n }\n })\n\n return response.data\n}\n\nexport async function updateBoard(board: Board) {\n /*\n input BoardPatch {\n name : String\n description : String\n model : String\n }\n */\n var { id, name, description, model, groupId } = board\n model = JSON.stringify(model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBoard($id: String!, $patch: BoardPatch!) {\n updateBoard(id: $id, patch: $patch) {\n id\n name\n description\n model\n group {\n id\n name\n }\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description, model, groupId }\n }\n })\n\n return response.data\n}\n\nexport async function deleteBoard(id: string) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteBoard(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n\nexport async function fetchBoardInfoById(boardId: string) {\n const { data } = await client.query({\n query: gql`\n query FetchBoardById($id: String!) {\n board(id: $id) {\n id\n name\n description\n group {\n id\n name\n }\n thumbnail\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n\n groups {\n items {\n id\n name\n description\n }\n }\n }\n `,\n variables: { id: boardId }\n })\n\n return data\n}\n"]}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/graphql/board.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildArgs, client } from '@operato/graphql'\n\nimport { Board } from '../types'\nimport gql from 'graphql-tag'\n\nexport async function fetchBoardList(listParam: any = {}) {\n const response = await client.query({\n query: gql`\n {\n boards(${buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n sortOrder\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchBoardNameById(id: string): Promise<string> {\n const { data } = await client.query({\n query: gql`\n query FetchBoardName($id: String!) {\n board(id: $id) {\n id\n name\n }\n }\n `,\n variables: { id }\n })\n return (data as any).board?.name || id\n}\n\n/** 대표명 + 다국어(nameI18n) 를 함께 반환 — 표시 측에서 현재 언어로 resolve 하기 위함. */\nexport async function fetchBoardNameInfoById(id: string): Promise<{ name?: string; nameI18n?: string }> {\n const { data } = await client.query({\n query: gql`\n query FetchBoardNameInfo($id: String!) {\n board(id: $id) {\n id\n name\n nameI18n\n }\n }\n `,\n variables: { id }\n })\n return { name: (data as any).board?.name, nameI18n: (data as any).board?.nameI18n }\n}\n\nexport async function reorderBoard(id: string, prevId?: string, nextId?: string) {\n const response = await client.mutate({\n mutation: gql`\n mutation ReorderBoard($id: String!, $prevId: String, $nextId: String) {\n reorderBoard(id: $id, prevId: $prevId, nextId: $nextId)\n }\n `,\n variables: { id, prevId, nextId }\n })\n return response.data\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n const response = await client.query({\n query: gql`\n query FetchBoardById($id: String!, $cachedUpdatedAt: String, $filters: [Filter!]) {\n board(id: $id, cachedUpdatedAt: $cachedUpdatedAt) {\n id\n name\n description\n group {\n id\n name\n }\n thumbnail\n model\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n\n themes(filters: $filters) {\n items {\n name\n description\n active\n type\n value\n }\n }\n }\n `,\n variables: {\n id,\n cachedUpdatedAt,\n filters: [\n {\n name: 'active',\n operator: 'eq',\n value: true\n }\n ]\n }\n })\n\n return response.data\n}\n\nexport async function createBoard(board: Board) {\n /*\n input NewBoard {\n name : String!\n description : String\n model : String!\n groupId : String!\n }\n */\n\n board.model = JSON.stringify(board.model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBoard($board: NewBoard!) {\n createBoard(board: $board) {\n id\n name\n description\n model\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n board\n }\n })\n\n return response.data\n}\n\nexport async function updateBoard(board: Board) {\n /*\n input BoardPatch {\n name : String\n description : String\n model : String\n }\n */\n var { id, name, description, model, groupId } = board\n model = JSON.stringify(model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBoard($id: String!, $patch: BoardPatch!) {\n updateBoard(id: $id, patch: $patch) {\n id\n name\n description\n model\n group {\n id\n name\n }\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description, model, groupId }\n }\n })\n\n return response.data\n}\n\nexport async function deleteBoard(id: string) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteBoard(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n\nexport async function fetchBoardInfoById(boardId: string) {\n const { data } = await client.query({\n query: gql`\n query FetchBoardById($id: String!) {\n board(id: $id) {\n id\n name\n description\n group {\n id\n name\n }\n thumbnail\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n\n groups {\n items {\n id\n name\n description\n }\n }\n }\n `,\n variables: { id: boardId }\n })\n\n return data\n}\n"]}
@@ -1,5 +1,13 @@
1
1
  import { Component, DataSubscriptionProvider } from '@hatiolab/things-scene';
2
2
  export declare class DataSubscriptionProviderImpl implements DataSubscriptionProvider {
3
- subscribe(tag: string, component: Component): Promise<import("zen-observable-ts").Subscription>;
3
+ private _paused;
4
+ private _subscriptions;
5
+ subscribe(tag: string, component: Component): Promise<{
6
+ unsubscribe: () => void;
7
+ }>;
8
+ /** 플레이백 시작: 모든 구독을 실제 해제 */
9
+ pause(): void;
10
+ /** 플레이백 종료: 보관된 tag 로 재구독 */
11
+ resume(): Promise<void>;
4
12
  dispose(): void;
5
13
  }
@@ -1,24 +1,61 @@
1
1
  import gql from 'graphql-tag';
2
2
  import { subscribe } from '@operato/graphql';
3
3
  export class DataSubscriptionProviderImpl {
4
+ constructor() {
5
+ this._paused = false;
6
+ this._subscriptions = new Map();
7
+ }
4
8
  async subscribe(tag, component) {
5
- return await subscribe({
9
+ const sub = await subscribe({
6
10
  query: gql `
7
11
  subscription {
8
12
  data(tag: "${tag}") {
9
13
  tag
10
14
  data
15
+ ts
11
16
  }
12
17
  }
13
18
  `
14
19
  }, {
15
20
  next: async ({ data }) => {
16
- if (data) {
17
- component.data = data.data.data;
21
+ var _a, _b, _c;
22
+ if (data && !this._paused) {
23
+ const payload = data.data;
24
+ (_c = (_b = (_a = component.app) === null || _a === void 0 ? void 0 : _a.lagTracker) === null || _b === void 0 ? void 0 : _b.record) === null || _c === void 0 ? void 0 : _c.call(_b, payload.tag, payload.ts);
25
+ component.data = payload.data;
18
26
  }
19
27
  }
20
28
  });
29
+ this._subscriptions.set(component, { tag, unsubscribe: sub.unsubscribe });
30
+ return {
31
+ unsubscribe: () => {
32
+ sub.unsubscribe();
33
+ this._subscriptions.delete(component);
34
+ }
35
+ };
36
+ }
37
+ /** 플레이백 시작: 모든 구독을 실제 해제 */
38
+ pause() {
39
+ this._paused = true;
40
+ for (const [, { unsubscribe }] of this._subscriptions) {
41
+ try {
42
+ unsubscribe();
43
+ }
44
+ catch (_a) { }
45
+ }
46
+ }
47
+ /** 플레이백 종료: 보관된 tag 로 재구독 */
48
+ async resume() {
49
+ const entries = [...this._subscriptions.entries()];
50
+ this._subscriptions.clear();
51
+ this._paused = false;
52
+ for (const [component, { tag }] of entries) {
53
+ await this.subscribe(tag, component);
54
+ }
55
+ }
56
+ dispose() {
57
+ this.pause();
58
+ this._subscriptions.clear();
21
59
  }
22
- dispose() { }
23
60
  }
24
61
  //# sourceMappingURL=data-subscription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-subscription.js","sourceRoot":"","sources":["../../../src/graphql/data-subscription.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,OAAO,4BAA4B;IACvC,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,SAAoB;QAC/C,OAAO,MAAM,SAAS,CACpB;YACE,KAAK,EAAE,GAAG,CAAA;;iCAEe,GAAG;;;;;iBAKnB;SACV,EACD;YACE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;gBACjC,CAAC;YACH,CAAC;SACF,CACF,CAAA;IACH,CAAC;IAED,OAAO,KAAI,CAAC;CACb","sourcesContent":["import { Component, DataSubscriptionProvider } from '@hatiolab/things-scene'\n\nimport gql from 'graphql-tag'\nimport { subscribe } from '@operato/graphql'\n\nexport class DataSubscriptionProviderImpl implements DataSubscriptionProvider {\n async subscribe(tag: string, component: Component) {\n return await subscribe(\n {\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data) {\n component.data = data.data.data\n }\n }\n }\n )\n }\n\n dispose() {}\n}\n"]}
1
+ {"version":3,"file":"data-subscription.js","sourceRoot":"","sources":["../../../src/graphql/data-subscription.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,OAAO,4BAA4B;IAAzC;QACU,YAAO,GAAG,KAAK,CAAA;QACf,mBAAc,GAA6D,IAAI,GAAG,EAAE,CAAA;IA4D9F,CAAC;IA1DC,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,SAAoB;QAC/C,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB;YACE,KAAK,EAAE,GAAG,CAAA;;iCAEe,GAAG;;;;;;iBAMnB;SACV,EACD;YACE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;;gBACtC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAExB;oBAAA,MAAA,MAAA,MAAC,SAAiB,CAAC,GAAG,0CAAE,UAAU,0CAAE,MAAM,mDAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;oBACtE,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;gBAC/B,CAAC;YACH,CAAC;SACF,CACF,CAAA;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QAEzE,OAAO;YACL,WAAW,EAAE,GAAG,EAAE;gBAChB,GAAG,CAAC,WAAW,EAAE,CAAA;gBACjB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACvC,CAAC;SACF,CAAA;IACH,CAAC;IAED,4BAA4B;IAC5B,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtD,IAAI,CAAC;gBAAC,WAAW,EAAE,CAAA;YAAC,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;QAChC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QAEpB,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;CACF","sourcesContent":["import { Component, DataSubscriptionProvider } from '@hatiolab/things-scene'\n\nimport gql from 'graphql-tag'\nimport { subscribe } from '@operato/graphql'\n\nexport class DataSubscriptionProviderImpl implements DataSubscriptionProvider {\n private _paused = false\n private _subscriptions: Map<Component, { tag: string; unsubscribe: () => void }> = new Map()\n\n async subscribe(tag: string, component: Component): Promise<{ unsubscribe: () => void }> {\n const sub = await subscribe(\n {\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n ts\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data && !this._paused) {\n const payload = data.data\n // 전달 지연 기록 (scene/app 레벨 트래커) — ts 는 component.data 에 넣지 않음.\n ;(component as any).app?.lagTracker?.record?.(payload.tag, payload.ts)\n component.data = payload.data\n }\n }\n }\n )\n\n this._subscriptions.set(component, { tag, unsubscribe: sub.unsubscribe })\n\n return {\n unsubscribe: () => {\n sub.unsubscribe()\n this._subscriptions.delete(component)\n }\n }\n }\n\n /** 플레이백 시작: 모든 구독을 실제 해제 */\n pause() {\n this._paused = true\n for (const [, { unsubscribe }] of this._subscriptions) {\n try { unsubscribe() } catch {}\n }\n }\n\n /** 플레이백 종료: 보관된 tag 로 재구독 */\n async resume() {\n const entries = [...this._subscriptions.entries()]\n this._subscriptions.clear()\n this._paused = false\n\n for (const [component, { tag }] of entries) {\n await this.subscribe(tag, component)\n }\n }\n\n dispose() {\n this.pause()\n this._subscriptions.clear()\n }\n}\n"]}
@@ -4,3 +4,4 @@ export * from './favorite-board';
4
4
  export * from './group';
5
5
  export * from './scenario';
6
6
  export * from './theme';
7
+ export * from './playback';
@@ -4,4 +4,5 @@ export * from './favorite-board';
4
4
  export * from './group';
5
5
  export * from './scenario';
6
6
  export * from './theme';
7
+ export * from './playback';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA","sourcesContent":["export * from './board'\nexport * from './data-subscription'\nexport * from './favorite-board'\nexport * from './group'\nexport * from './scenario'\nexport * from './theme'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/graphql/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA","sourcesContent":["export * from './board'\nexport * from './data-subscription'\nexport * from './favorite-board'\nexport * from './group'\nexport * from './scenario'\nexport * from './theme'\nexport * from './playback'\n"]}
@@ -0,0 +1,41 @@
1
+ export interface PlaybackFrame {
2
+ type: 'snapshot' | 'diff';
3
+ time: string;
4
+ data: any[];
5
+ }
6
+ export interface PlaybackScenario {
7
+ scenarioName: string;
8
+ snapshots: PlaybackFrame[];
9
+ }
10
+ export interface PlaybackResult {
11
+ status: boolean;
12
+ errorMessage?: string;
13
+ playback?: {
14
+ scenarios: PlaybackScenario[];
15
+ };
16
+ }
17
+ export declare function fetchPlayback(startTime: string, endTime?: string, includeSnapshot?: boolean, count?: number): Promise<PlaybackResult>;
18
+ export interface CarrierLocation {
19
+ /**
20
+ * "YYYY-MM-DDTHH:mm:ss[.SSS]" — T 구분자, ms 정밀도 가변.
21
+ * timezone suffix 없음 — 기존 /playback 과 동일 (서버=클라 로컬타임 가정).
22
+ */
23
+ time: string;
24
+ /** 머신 이름. 추적 불가 구간은 "NA". */
25
+ machineName: string;
26
+ /** 유닛 이름. 추적 불가 구간은 "NA". */
27
+ unitName: string;
28
+ }
29
+ export interface CarrierLocationHistoryResult {
30
+ errorMessage: string | null;
31
+ carrierLocHistory: CarrierLocation[];
32
+ }
33
+ /**
34
+ * GraphQL — 단일 carrier 의 시계열 위치 이력 조회.
35
+ * RESTful 의 GET /mcs/lv/playback/carrier-location 미러.
36
+ *
37
+ * 요청 시간 포맷: "YYYY-MM-DD HH:mm:ss" (스페이스 구분자, 기존 playback 동일).
38
+ * 응답 time 포맷: "YYYY-MM-DDTHH:mm:ss[.SSS]" (T 구분자, 가변 ms).
39
+ * 양쪽 모두 timezone suffix 없음 — 로컬타임 기준.
40
+ */
41
+ export declare function fetchCarrierLocationHistory(startTime: string, endTime: string, carrierName: string): Promise<CarrierLocationHistoryResult>;
@@ -0,0 +1,70 @@
1
+ import gql from 'graphql-tag';
2
+ import { client } from '@operato/graphql';
3
+ export async function fetchPlayback(startTime, endTime, includeSnapshot = true, count) {
4
+ var _a;
5
+ const { data } = await client.query({
6
+ query: gql `
7
+ query ($startTime: String!, $endTime: String, $count: Int, $includeSnapshot: Boolean) {
8
+ playback(startTime: $startTime, endTime: $endTime, count: $count, includeSnapshot: $includeSnapshot) {
9
+ status
10
+ errorMessage
11
+ playback {
12
+ scenarios {
13
+ scenarioName
14
+ snapshots {
15
+ type
16
+ time
17
+ data
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ `,
24
+ variables: { startTime, endTime, count, includeSnapshot }
25
+ });
26
+ const result = data.playback;
27
+ // data가 JSON string으로 전달되므로 파싱
28
+ if ((_a = result === null || result === void 0 ? void 0 : result.playback) === null || _a === void 0 ? void 0 : _a.scenarios) {
29
+ for (const scenario of result.playback.scenarios) {
30
+ for (const frame of scenario.snapshots) {
31
+ if (typeof frame.data === 'string') {
32
+ try {
33
+ frame.data = JSON.parse(frame.data);
34
+ }
35
+ catch (_b) {
36
+ frame.data = [];
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ /**
45
+ * GraphQL — 단일 carrier 의 시계열 위치 이력 조회.
46
+ * RESTful 의 GET /mcs/lv/playback/carrier-location 미러.
47
+ *
48
+ * 요청 시간 포맷: "YYYY-MM-DD HH:mm:ss" (스페이스 구분자, 기존 playback 동일).
49
+ * 응답 time 포맷: "YYYY-MM-DDTHH:mm:ss[.SSS]" (T 구분자, 가변 ms).
50
+ * 양쪽 모두 timezone suffix 없음 — 로컬타임 기준.
51
+ */
52
+ export async function fetchCarrierLocationHistory(startTime, endTime, carrierName) {
53
+ const { data } = await client.query({
54
+ query: gql `
55
+ query ($startTime: String!, $endTime: String!, $carrierName: String!) {
56
+ carrierLocationHistory(startTime: $startTime, endTime: $endTime, carrierName: $carrierName) {
57
+ errorMessage
58
+ carrierLocHistory {
59
+ time
60
+ machineName
61
+ unitName
62
+ }
63
+ }
64
+ }
65
+ `,
66
+ variables: { startTime, endTime, carrierName }
67
+ });
68
+ return data.carrierLocationHistory;
69
+ }
70
+ //# sourceMappingURL=playback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playback.js","sourceRoot":"","sources":["../../../src/graphql/playback.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAqBzC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,OAAgB,EAChB,kBAA2B,IAAI,EAC/B,KAAc;;IAEd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBT;QACD,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;KAC1D,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,QAA0B,CAAA;IAE9C,+BAA+B;IAC/B,IAAI,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAE,SAAS,EAAE,CAAC;QAChC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,IAAI,CAAC;wBAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAAC,CAAC;oBAAC,WAAM,CAAC;wBAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;oBAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAqBD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,SAAiB,EACjB,OAAe,EACf,WAAmB;IAEnB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;KAWT;QACD,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE;KAC/C,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC,sBAAsD,CAAA;AACpE,CAAC","sourcesContent":["import gql from 'graphql-tag'\nimport { client } from '@operato/graphql'\n\nexport interface PlaybackFrame {\n type: 'snapshot' | 'diff'\n time: string\n data: any[]\n}\n\nexport interface PlaybackScenario {\n scenarioName: string\n snapshots: PlaybackFrame[]\n}\n\nexport interface PlaybackResult {\n status: boolean\n errorMessage?: string\n playback?: {\n scenarios: PlaybackScenario[]\n }\n}\n\nexport async function fetchPlayback(\n startTime: string,\n endTime?: string,\n includeSnapshot: boolean = true,\n count?: number\n): Promise<PlaybackResult> {\n const { data } = await client.query({\n query: gql`\n query ($startTime: String!, $endTime: String, $count: Int, $includeSnapshot: Boolean) {\n playback(startTime: $startTime, endTime: $endTime, count: $count, includeSnapshot: $includeSnapshot) {\n status\n errorMessage\n playback {\n scenarios {\n scenarioName\n snapshots {\n type\n time\n data\n }\n }\n }\n }\n }\n `,\n variables: { startTime, endTime, count, includeSnapshot }\n })\n\n const result = data.playback as PlaybackResult\n\n // data가 JSON string으로 전달되므로 파싱\n if (result?.playback?.scenarios) {\n for (const scenario of result.playback.scenarios) {\n for (const frame of scenario.snapshots) {\n if (typeof frame.data === 'string') {\n try { frame.data = JSON.parse(frame.data) } catch { frame.data = [] }\n }\n }\n }\n }\n\n return result\n}\n\n// ── Carrier Location History ─────────────────────────────────────────\n\nexport interface CarrierLocation {\n /**\n * \"YYYY-MM-DDTHH:mm:ss[.SSS]\" — T 구분자, ms 정밀도 가변.\n * timezone suffix 없음 — 기존 /playback 과 동일 (서버=클라 로컬타임 가정).\n */\n time: string\n /** 머신 이름. 추적 불가 구간은 \"NA\". */\n machineName: string\n /** 유닛 이름. 추적 불가 구간은 \"NA\". */\n unitName: string\n}\n\nexport interface CarrierLocationHistoryResult {\n errorMessage: string | null\n carrierLocHistory: CarrierLocation[]\n}\n\n/**\n * GraphQL — 단일 carrier 의 시계열 위치 이력 조회.\n * RESTful 의 GET /mcs/lv/playback/carrier-location 미러.\n *\n * 요청 시간 포맷: \"YYYY-MM-DD HH:mm:ss\" (스페이스 구분자, 기존 playback 동일).\n * 응답 time 포맷: \"YYYY-MM-DDTHH:mm:ss[.SSS]\" (T 구분자, 가변 ms).\n * 양쪽 모두 timezone suffix 없음 — 로컬타임 기준.\n */\nexport async function fetchCarrierLocationHistory(\n startTime: string,\n endTime: string,\n carrierName: string\n): Promise<CarrierLocationHistoryResult> {\n const { data } = await client.query({\n query: gql`\n query ($startTime: String!, $endTime: String!, $carrierName: String!) {\n carrierLocationHistory(startTime: $startTime, endTime: $endTime, carrierName: $carrierName) {\n errorMessage\n carrierLocHistory {\n time\n machineName\n unitName\n }\n }\n }\n `,\n variables: { startTime, endTime, carrierName }\n })\n\n return data.carrierLocationHistory as CarrierLocationHistoryResult\n}\n"]}
@@ -1,11 +1,41 @@
1
1
  export * from './graphql';
2
+ import type { FigureIdSearchOptions } from './restful';
3
+ export type { FigureIdSearchOptions } from './restful';
2
4
  import { Board } from './types';
3
5
  export declare function isRestfulAvailable(): string | null;
4
6
  export declare function fetchGroupList(): Promise<any>;
5
7
  export declare function fetchBoardList(listParam?: any): Promise<any>;
8
+ export declare function reorderBoard(id: string, prevId?: string, nextId?: string): Promise<any>;
9
+ export declare function fetchPlayback(startTime: string, endTime?: string, includeSnapshot?: boolean, count?: number): Promise<import("./graphql").PlaybackResult>;
10
+ export declare function fetchCarrierLocationHistory(startTime: string, endTime: string, carrierName: string): Promise<import("./graphql").CarrierLocationHistoryResult>;
6
11
  export declare function fetchBoardById(id: string, cachedUpdatedAt?: string): Promise<any>;
12
+ export declare function fetchBoardNameById(id: string): Promise<string>;
13
+ export declare function fetchBoardNameInfoById(id: string): Promise<{
14
+ name?: string;
15
+ nameI18n?: string;
16
+ }>;
7
17
  export declare function createBoard(board: Board): Promise<any>;
8
18
  export declare function themesColorMap(): Promise<string[]>;
9
19
  export declare function themesColorRange(): Promise<string[]>;
10
20
  export declare function themesAnimationMap(): Promise<string[]>;
11
21
  export declare function getPopupData(type: string, id: string): Promise<any>;
22
+ /**
23
+ * 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.
24
+ * 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.
25
+ *
26
+ * 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을
27
+ * 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.
28
+ *
29
+ * 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체
30
+ * 식별자("{machine} {unit}", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.
31
+ * 예) "stk01 p03" → STK01-P03 매치, "p03 stk01" 도 동일 매치.
32
+ *
33
+ * 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
34
+ */
35
+ export declare function searchFigureIds(type: string, keyword?: string, opts?: FigureIdSearchOptions): Promise<string[]>;
36
+ /**
37
+ * 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.
38
+ * keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.
39
+ * 빈 keyword 는 전체 반환. 예: "stk01 p03" ↔ "STK01-P03", "p03 stk01" 동일.
40
+ */
41
+ export declare function filterFigureIds(ids: string[], keyword: string): string[];
package/dist/src/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  export * from './graphql';
2
2
  import { themesColorMap as graphqlThemesColorMap, themesColorRange as graphqlThemesColorRange, themesAnimationMap as graphqlThemesAnimationMap } from './graphql';
3
3
  import { getPopupData as restfulGetPopupData, themesColorMap as restfulThemesColorMap, themesColorRange as restfulThemesColorRange, themesAnimationMap as restfulThemesAnimationMap } from './restful';
4
- import { fetchGroupList as restfulFetchGroupList, fetchBoardList as restfulFetchBoardList, createBoard as restfulCreateBoard, fetchBoardById as restfulFetchBoardById } from './restful';
5
- import { fetchGroupList as graphqlFetchGroupList, fetchBoardList as graphqlFetchBoardList, createBoard as graphqlCreateBoard, fetchBoardById as graphqlFetchBoardById } from './graphql';
4
+ import { fetchGroupList as restfulFetchGroupList, fetchBoardList as restfulFetchBoardList, createBoard as restfulCreateBoard, fetchBoardById as restfulFetchBoardById, fetchBoardNameById as restfulFetchBoardNameById, fetchBoardNameInfoById as restfulFetchBoardNameInfoById, reorderBoard as restfulReorderBoard, fetchPlayback as restfulFetchPlayback, fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory, fetchFigureIds as restfulFetchFigureIds } from './restful';
5
+ import { fetchGroupList as graphqlFetchGroupList, fetchBoardList as graphqlFetchBoardList, createBoard as graphqlCreateBoard, fetchBoardById as graphqlFetchBoardById, fetchBoardNameById as graphqlFetchBoardNameById, fetchBoardNameInfoById as graphqlFetchBoardNameInfoById, reorderBoard as graphqlReorderBoard, fetchPlayback as graphqlFetchPlayback, fetchCarrierLocationHistory as graphqlFetchCarrierLocationHistory } from './graphql';
6
6
  export function isRestfulAvailable() {
7
7
  return sessionStorage.getItem('lv_server_ip_port');
8
8
  }
@@ -22,6 +22,30 @@ export async function fetchBoardList(listParam = {}) {
22
22
  return await graphqlFetchBoardList(listParam);
23
23
  }
24
24
  }
25
+ export async function reorderBoard(id, prevId, nextId) {
26
+ if (isRestfulAvailable()) {
27
+ return await restfulReorderBoard(id, prevId, nextId);
28
+ }
29
+ else {
30
+ return await graphqlReorderBoard(id, prevId, nextId);
31
+ }
32
+ }
33
+ export async function fetchPlayback(startTime, endTime, includeSnapshot = true, count) {
34
+ if (isRestfulAvailable()) {
35
+ return await restfulFetchPlayback(startTime, endTime, includeSnapshot, count);
36
+ }
37
+ else {
38
+ return await graphqlFetchPlayback(startTime, endTime, includeSnapshot, count);
39
+ }
40
+ }
41
+ export async function fetchCarrierLocationHistory(startTime, endTime, carrierName) {
42
+ if (isRestfulAvailable()) {
43
+ return await restfulFetchCarrierLocationHistory(startTime, endTime, carrierName);
44
+ }
45
+ else {
46
+ return await graphqlFetchCarrierLocationHistory(startTime, endTime, carrierName);
47
+ }
48
+ }
25
49
  export async function fetchBoardById(id, cachedUpdatedAt) {
26
50
  if (isRestfulAvailable()) {
27
51
  return await restfulFetchBoardById(id, cachedUpdatedAt);
@@ -30,6 +54,22 @@ export async function fetchBoardById(id, cachedUpdatedAt) {
30
54
  return await graphqlFetchBoardById(id, cachedUpdatedAt);
31
55
  }
32
56
  }
57
+ export async function fetchBoardNameById(id) {
58
+ if (isRestfulAvailable()) {
59
+ return await restfulFetchBoardNameById(id);
60
+ }
61
+ else {
62
+ return await graphqlFetchBoardNameById(id);
63
+ }
64
+ }
65
+ export async function fetchBoardNameInfoById(id) {
66
+ if (isRestfulAvailable()) {
67
+ return await restfulFetchBoardNameInfoById(id);
68
+ }
69
+ else {
70
+ return await graphqlFetchBoardNameInfoById(id);
71
+ }
72
+ }
33
73
  export async function createBoard(board) {
34
74
  if (isRestfulAvailable()) {
35
75
  return await restfulCreateBoard(board);
@@ -81,4 +121,34 @@ export async function getPopupData(type, id) {
81
121
  await new Promise(resolve => setTimeout(resolve, 1000));
82
122
  }
83
123
  }
124
+ /**
125
+ * 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.
126
+ * 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.
127
+ *
128
+ * 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을
129
+ * 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.
130
+ *
131
+ * 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체
132
+ * 식별자("{machine} {unit}", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.
133
+ * 예) "stk01 p03" → STK01-P03 매치, "p03 stk01" 도 동일 매치.
134
+ *
135
+ * 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
136
+ */
137
+ export async function searchFigureIds(type, keyword = '', opts = {}) {
138
+ return filterFigureIds(await restfulFetchFigureIds(type, opts), keyword);
139
+ }
140
+ /**
141
+ * 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.
142
+ * keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.
143
+ * 빈 keyword 는 전체 반환. 예: "stk01 p03" ↔ "STK01-P03", "p03 stk01" 동일.
144
+ */
145
+ export function filterFigureIds(ids, keyword) {
146
+ const terms = keyword.trim().toLowerCase().split(/\s+/).filter(Boolean);
147
+ if (!terms.length)
148
+ return ids;
149
+ return ids.filter(id => {
150
+ const s = id.toLowerCase();
151
+ return terms.every(t => s.includes(t));
152
+ });
153
+ }
84
154
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './graphql'\n\nimport {\n themesColorMap as graphqlThemesColorMap,\n themesColorRange as graphqlThemesColorRange,\n themesAnimationMap as graphqlThemesAnimationMap\n} from './graphql'\n\nimport {\n getPopupData as restfulGetPopupData,\n themesColorMap as restfulThemesColorMap,\n themesColorRange as restfulThemesColorRange,\n themesAnimationMap as restfulThemesAnimationMap\n} from './restful'\n\nimport {\n fetchGroupList as restfulFetchGroupList,\n fetchBoardList as restfulFetchBoardList,\n createBoard as restfulCreateBoard,\n fetchBoardById as restfulFetchBoardById\n} from './restful'\n\nimport {\n fetchGroupList as graphqlFetchGroupList,\n fetchBoardList as graphqlFetchBoardList,\n createBoard as graphqlCreateBoard,\n fetchBoardById as graphqlFetchBoardById\n} from './graphql'\n\nimport { Board } from './types'\n\nexport function isRestfulAvailable() {\n return sessionStorage.getItem('lv_server_ip_port')\n}\n\nexport async function fetchGroupList() {\n if (isRestfulAvailable()) {\n return await restfulFetchGroupList()\n } else {\n return await graphqlFetchGroupList()\n }\n}\n\nexport async function fetchBoardList(listParam: any = {}) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardList(listParam)\n } else {\n return await graphqlFetchBoardList(listParam)\n }\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardById(id, cachedUpdatedAt)\n } else {\n return await graphqlFetchBoardById(id, cachedUpdatedAt)\n }\n}\n\nexport async function createBoard(board: Board) {\n if (isRestfulAvailable()) {\n return await restfulCreateBoard(board)\n } else {\n return await graphqlCreateBoard(board)\n }\n}\n\nexport async function themesColorMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorMap()\n } else {\n return await graphqlThemesColorMap()\n }\n}\n\nexport async function themesColorRange() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorRange()\n } else {\n return await graphqlThemesColorRange()\n }\n}\n\nexport async function themesAnimationMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesAnimationMap()\n } else {\n return await graphqlThemesAnimationMap()\n }\n}\n\nexport async function getPopupData(type: string, id: string) {\n if (isRestfulAvailable()) {\n const response = (await restfulGetPopupData(type, id))?.data\n\n if (!response || !response.status) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: 'Error : getPopupData'\n }\n })\n )\n throw new Error('Error : getPopupData')\n }\n\n return response.popupData\n } else {\n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './graphql'\n\nimport {\n themesColorMap as graphqlThemesColorMap,\n themesColorRange as graphqlThemesColorRange,\n themesAnimationMap as graphqlThemesAnimationMap\n} from './graphql'\n\nimport {\n getPopupData as restfulGetPopupData,\n themesColorMap as restfulThemesColorMap,\n themesColorRange as restfulThemesColorRange,\n themesAnimationMap as restfulThemesAnimationMap\n} from './restful'\n\nimport {\n fetchGroupList as restfulFetchGroupList,\n fetchBoardList as restfulFetchBoardList,\n createBoard as restfulCreateBoard,\n fetchBoardById as restfulFetchBoardById,\n fetchBoardNameById as restfulFetchBoardNameById,\n fetchBoardNameInfoById as restfulFetchBoardNameInfoById,\n reorderBoard as restfulReorderBoard,\n fetchPlayback as restfulFetchPlayback,\n fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory,\n fetchFigureIds as restfulFetchFigureIds\n} from './restful'\n\nimport type { FigureIdSearchOptions } from './restful'\nexport type { FigureIdSearchOptions } from './restful'\n\nimport {\n fetchGroupList as graphqlFetchGroupList,\n fetchBoardList as graphqlFetchBoardList,\n createBoard as graphqlCreateBoard,\n fetchBoardById as graphqlFetchBoardById,\n fetchBoardNameById as graphqlFetchBoardNameById,\n fetchBoardNameInfoById as graphqlFetchBoardNameInfoById,\n reorderBoard as graphqlReorderBoard,\n fetchPlayback as graphqlFetchPlayback,\n fetchCarrierLocationHistory as graphqlFetchCarrierLocationHistory\n} from './graphql'\n\nimport { Board } from './types'\n\nexport function isRestfulAvailable() {\n return sessionStorage.getItem('lv_server_ip_port')\n}\n\nexport async function fetchGroupList() {\n if (isRestfulAvailable()) {\n return await restfulFetchGroupList()\n } else {\n return await graphqlFetchGroupList()\n }\n}\n\nexport async function fetchBoardList(listParam: any = {}) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardList(listParam)\n } else {\n return await graphqlFetchBoardList(listParam)\n }\n}\n\nexport async function reorderBoard(id: string, prevId?: string, nextId?: string) {\n if (isRestfulAvailable()) {\n return await restfulReorderBoard(id, prevId, nextId)\n } else {\n return await graphqlReorderBoard(id, prevId, nextId)\n }\n}\n\nexport async function fetchPlayback(\n startTime: string,\n endTime?: string,\n includeSnapshot: boolean = true,\n count?: number\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchPlayback(startTime, endTime, includeSnapshot, count)\n } else {\n return await graphqlFetchPlayback(startTime, endTime, includeSnapshot, count)\n }\n}\n\nexport async function fetchCarrierLocationHistory(\n startTime: string,\n endTime: string,\n carrierName: string\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchCarrierLocationHistory(startTime, endTime, carrierName)\n } else {\n return await graphqlFetchCarrierLocationHistory(startTime, endTime, carrierName)\n }\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardById(id, cachedUpdatedAt)\n } else {\n return await graphqlFetchBoardById(id, cachedUpdatedAt)\n }\n}\n\nexport async function fetchBoardNameById(id: string): Promise<string> {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardNameById(id)\n } else {\n return await graphqlFetchBoardNameById(id)\n }\n}\n\nexport async function fetchBoardNameInfoById(id: string): Promise<{ name?: string; nameI18n?: string }> {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardNameInfoById(id)\n } else {\n return await graphqlFetchBoardNameInfoById(id)\n }\n}\n\nexport async function createBoard(board: Board) {\n if (isRestfulAvailable()) {\n return await restfulCreateBoard(board)\n } else {\n return await graphqlCreateBoard(board)\n }\n}\n\nexport async function themesColorMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorMap()\n } else {\n return await graphqlThemesColorMap()\n }\n}\n\nexport async function themesColorRange() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorRange()\n } else {\n return await graphqlThemesColorRange()\n }\n}\n\nexport async function themesAnimationMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesAnimationMap()\n } else {\n return await graphqlThemesAnimationMap()\n }\n}\n\nexport async function getPopupData(type: string, id: string) {\n if (isRestfulAvailable()) {\n const response = (await restfulGetPopupData(type, id))?.data\n\n if (!response || !response.status) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: 'Error : getPopupData'\n }\n })\n )\n throw new Error('Error : getPopupData')\n }\n\n return response.popupData\n } else {\n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n}\n\n/**\n * 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.\n * 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.\n *\n * 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을\n * 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.\n *\n * 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체\n * 식별자(\"{machine} {unit}\", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.\n * 예) \"stk01 p03\" → STK01-P03 매치, \"p03 stk01\" 도 동일 매치.\n *\n * 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.\n */\nexport async function searchFigureIds(\n type: string,\n keyword: string = '',\n opts: FigureIdSearchOptions = {}\n): Promise<string[]> {\n return filterFigureIds(await restfulFetchFigureIds(type, opts), keyword)\n}\n\n/**\n * 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.\n * keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.\n * 빈 keyword 는 전체 반환. 예: \"stk01 p03\" ↔ \"STK01-P03\", \"p03 stk01\" 동일.\n */\nexport function filterFigureIds(ids: string[], keyword: string): string[] {\n const terms = keyword.trim().toLowerCase().split(/\\s+/).filter(Boolean)\n if (!terms.length) return ids\n return ids.filter(id => {\n const s = id.toLowerCase()\n return terms.every(t => s.includes(t))\n })\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  export default function authHeader(): {
2
2
  'Access-Control-Allow-Origin': string;
3
3
  'Content-Type': string;
4
+ 'X-Lang': string;
4
5
  };
@@ -13,10 +13,21 @@
13
13
  *
14
14
  */
15
15
  export default function authHeader() {
16
+ // 현재 사용자 언어를 백엔드(fmb-service)로 전달 → 보드명 다국어 해석(displayName)을 서버가 담당.
17
+ // MCS 호스트가 세션에 넣어주는 lv_server_lang 을 X-Lang 헤더로 실어 보낸다(모든 REST 요청 공통).
18
+ const lang = (() => {
19
+ try {
20
+ return sessionStorage.getItem('lv_server_lang') || '';
21
+ }
22
+ catch (_a) {
23
+ return '';
24
+ }
25
+ })();
16
26
  return {
17
27
  'Access-Control-Allow-Origin': '*',
18
28
  // 'Access-Control-Allow-Credentials':true,
19
- 'Content-Type': 'application/json; charset = utf-8'
29
+ 'Content-Type': 'application/json; charset = utf-8',
30
+ 'X-Lang': lang
20
31
  };
21
32
  }
22
33
  //# sourceMappingURL=authHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authHeader.js","sourceRoot":"","sources":["../../../src/restful/authHeader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU;IAChC,OAAO;QACL,6BAA6B,EAAE,GAAG;QAClC,2CAA2C;QAC3C,cAAc,EAAE,mCAAmC;KACpD,CAAA;AACH,CAAC","sourcesContent":["/*\n * Copyright (c) 2020 SKCC & Smartworks.net, Inc. All Rights Reserved\n *\n * Use of this software is controlled by the terms and conditions found in the\n * license agreement under which this software has been supplied.\n *------------------------------------------------------------------------------\n *\n * Source Name: \tauth.header.js\n * Description: 회원인증된 Auth Token정보를 Axios Header에 기록해주는 Java Script\n * Authors: Y.S. Jung\n * Update History:\n * 2020.09.01 : Created by Y.S. Jung\n *\n */\nexport default function authHeader() {\n return {\n 'Access-Control-Allow-Origin': '*',\n // 'Access-Control-Allow-Credentials':true,\n 'Content-Type': 'application/json; charset = utf-8'\n }\n}\n"]}
1
+ {"version":3,"file":"authHeader.js","sourceRoot":"","sources":["../../../src/restful/authHeader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU;IAChC,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC;YACH,OAAO,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAA;QACvD,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO;QACL,6BAA6B,EAAE,GAAG;QAClC,2CAA2C;QAC3C,cAAc,EAAE,mCAAmC;QACnD,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC","sourcesContent":["/*\n * Copyright (c) 2020 SKCC & Smartworks.net, Inc. All Rights Reserved\n *\n * Use of this software is controlled by the terms and conditions found in the\n * license agreement under which this software has been supplied.\n *------------------------------------------------------------------------------\n *\n * Source Name: \tauth.header.js\n * Description: 회원인증된 Auth Token정보를 Axios Header에 기록해주는 Java Script\n * Authors: Y.S. Jung\n * Update History:\n * 2020.09.01 : Created by Y.S. Jung\n *\n */\nexport default function authHeader() {\n // 현재 사용자 언어를 백엔드(fmb-service)로 전달 → 보드명 다국어 해석(displayName)을 서버가 담당.\n // MCS 호스트가 세션에 넣어주는 lv_server_lang 을 X-Lang 헤더로 실어 보낸다(모든 REST 요청 공통).\n const lang = (() => {\n try {\n return sessionStorage.getItem('lv_server_lang') || ''\n } catch {\n return ''\n }\n })()\n\n return {\n 'Access-Control-Allow-Origin': '*',\n // 'Access-Control-Allow-Credentials':true,\n 'Content-Type': 'application/json; charset = utf-8',\n 'X-Lang': lang\n }\n}\n"]}
@@ -3,6 +3,13 @@ export declare function fetchBoardList(listParam?: any): Promise<import("./commo
3
3
  export declare function getBoardByUseMcsAutoConfigAndId(id: string): Promise<import("./common").RestfulReturnType | undefined>;
4
4
  export declare function createBoard(board: Board): Promise<import("./common").RestfulReturnType | undefined>;
5
5
  export declare function deleteBoard(id: string): Promise<import("./common").RestfulReturnType | undefined>;
6
+ export declare function fetchBoardNameById(id: string): Promise<string>;
7
+ /** 대표명 + 다국어(nameI18n) 를 함께 반환 — 표시 측에서 현재 언어로 resolve 하기 위함. */
8
+ export declare function fetchBoardNameInfoById(id: string): Promise<{
9
+ name?: string;
10
+ nameI18n?: string;
11
+ }>;
12
+ export declare function reorderBoard(id: string, prevId?: string, nextId?: string): Promise<import("./common").RestfulReturnType | undefined>;
6
13
  export declare function fetchBoardById(id: string, cachedUpdatedAt?: string): Promise<import("./common").RestfulReturnType | undefined>;
7
14
  export declare function fetchBoardInfoById(id: string): Promise<import("./common").RestfulReturnType | undefined>;
8
15
  export declare function updateBoard(board: any, from?: string): Promise<import("./common").RestfulReturnType | undefined>;
@@ -12,6 +12,21 @@ export function createBoard(board) {
12
12
  export function deleteBoard(id) {
13
13
  return callApi(getRestServiceFullPath() + '/deleteBoard/' + id, 'delete', null, null);
14
14
  }
15
+ export async function fetchBoardNameById(id) {
16
+ var _a, _b;
17
+ const data = await callApi(getRestServiceFullPath() + '/fetchBoardById/' + id, 'get', null, null);
18
+ // 표시명은 백엔드가 요청 언어로 해석한 displayName. 없으면 대표명(name) 폴백.
19
+ return ((_a = data === null || data === void 0 ? void 0 : data.board) === null || _a === void 0 ? void 0 : _a.displayName) || ((_b = data === null || data === void 0 ? void 0 : data.board) === null || _b === void 0 ? void 0 : _b.name) || id;
20
+ }
21
+ /** 대표명 + 다국어(nameI18n) 를 함께 반환 — 표시 측에서 현재 언어로 resolve 하기 위함. */
22
+ export async function fetchBoardNameInfoById(id) {
23
+ var _a, _b;
24
+ const data = await callApi(getRestServiceFullPath() + '/fetchBoardById/' + id, 'get', null, null);
25
+ return { name: (_a = data === null || data === void 0 ? void 0 : data.board) === null || _a === void 0 ? void 0 : _a.name, nameI18n: (_b = data === null || data === void 0 ? void 0 : data.board) === null || _b === void 0 ? void 0 : _b.nameI18n };
26
+ }
27
+ export async function reorderBoard(id, prevId, nextId) {
28
+ return callApi(getRestServiceFullPath() + '/reorderBoard', 'post', null, { id, prevId, nextId });
29
+ }
15
30
  export function fetchBoardById(id, cachedUpdatedAt) {
16
31
  const url = getRestServiceFullPath() + '/fetchBoardById/' + id
17
32
  + (cachedUpdatedAt ? `?cachedUpdatedAt=${encodeURIComponent(cachedUpdatedAt)}` : '');