commandbar 1.3.1 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- package/build/commandbar-js/src/index.d.ts +10 -0
- package/build/commandbar-js/src/index.js +1 -0
- package/build/commandbar-js/src/init.d.ts +17 -0
- package/build/commandbar-js/src/snippet.d.ts +1 -0
- package/build/internal/src/client/AddContextOptions.d.ts +57 -0
- package/build/internal/src/client/CommandBarClientSDK.d.ts +182 -0
- package/build/internal/src/client/CommandBarProxySDK.d.ts +48 -0
- package/build/internal/src/client/CommandBarSDK.d.ts +42 -0
- package/build/internal/src/client/EventHandler.d.ts +54 -0
- package/build/internal/src/client/Reporting.d.ts +1 -0
- package/build/internal/src/client/SDKConfig.d.ts +7 -0
- package/build/internal/src/client/SentryReporter.d.ts +41 -0
- package/build/internal/src/client/proxy.d.ts +15 -0
- package/build/internal/src/client/symbols.d.ts +27 -0
- package/build/internal/src/middleware/CommandFromClientV.d.ts +128 -0
- package/build/internal/src/middleware/ICommandFromClientType.d.ts +3 -0
- package/build/internal/src/middleware/IResourceSettings.d.ts +3 -0
- package/build/internal/src/middleware/OrganizationV.d.ts +42 -0
- package/build/internal/src/middleware/ResourceSettingsV.d.ts +33 -0
- package/build/internal/src/middleware/helpers/argument.d.ts +404 -0
- package/build/internal/src/middleware/helpers/commandTemplate.d.ts +129 -0
- package/build/internal/src/util/Disposable.d.ts +17 -0
- package/package.json +12 -14
- package/scripts/minify-snippet.ts +36 -0
- package/scripts/watch.ts +5 -0
- package/src/index.ts +11 -2
- package/src/init.ts +29 -88
- package/src/snippet.ts +57 -45
- package/tsconfig.json +5 -3
- package/webpack.config.js +8 -13
- package/yarn-error.log +20216 -0
- package/build/commandbar.d.ts +0 -67
- package/build/commandbar.d.ts.map +0 -1
- package/build/commandbar.js +0 -3
- package/build/commandbar.js.map +0 -1
- package/build/index.d.ts +0 -3
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -27
- package/build/index.js.map +0 -1
- package/build/init.d.ts +0 -17
- package/build/init.d.ts.map +0 -1
- package/build/init.js +0 -116
- package/build/init.js.map +0 -1
- package/build/snippet.d.ts +0 -2
- package/build/snippet.d.ts.map +0 -1
- package/build/snippet.js +0 -55
- package/build/snippet.js.map +0 -1
- package/src/commandbar.ts +0 -76
@@ -0,0 +1,129 @@
|
|
1
|
+
/*******************************************************************************/
|
2
|
+
import * as t from 'io-ts';
|
3
|
+
/*******************************************************************************/
|
4
|
+
export declare const TemplateOptionsV: t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
5
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
6
|
+
object: t.StringC;
|
7
|
+
hoverTooltip: t.BooleanC;
|
8
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
9
|
+
}>]>;
|
10
|
+
export declare const AdminTemplateV: t.IntersectionC<[t.TypeC<{
|
11
|
+
type: t.LiteralC<"admin">;
|
12
|
+
value: t.StringC;
|
13
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
14
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
15
|
+
object: t.StringC;
|
16
|
+
hoverTooltip: t.BooleanC;
|
17
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
18
|
+
}>]>]>;
|
19
|
+
export declare const CallbackTemplateV: t.IntersectionC<[t.TypeC<{
|
20
|
+
type: t.LiteralC<"callback">;
|
21
|
+
value: t.StringC;
|
22
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
23
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
24
|
+
object: t.StringC;
|
25
|
+
hoverTooltip: t.BooleanC;
|
26
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
27
|
+
}>]>]>;
|
28
|
+
export declare const LinkTemplateV: t.IntersectionC<[t.TypeC<{
|
29
|
+
type: t.LiteralC<"link">;
|
30
|
+
value: t.StringC;
|
31
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
32
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
33
|
+
object: t.StringC;
|
34
|
+
hoverTooltip: t.BooleanC;
|
35
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
36
|
+
}>]>]>;
|
37
|
+
export declare const ClickTemplateV: t.IntersectionC<[t.TypeC<{
|
38
|
+
type: t.UnionC<[t.LiteralC<"click">, t.LiteralC<"clickBySelector">, t.LiteralC<"clickByXpath">]>;
|
39
|
+
value: t.ArrayC<t.StringC>;
|
40
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
41
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
42
|
+
object: t.StringC;
|
43
|
+
hoverTooltip: t.BooleanC;
|
44
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
45
|
+
}>]>]>;
|
46
|
+
export declare const BuiltInTemplateV: t.IntersectionC<[t.TypeC<{
|
47
|
+
type: t.LiteralC<"builtin">;
|
48
|
+
value: t.StringC;
|
49
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
50
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
51
|
+
object: t.StringC;
|
52
|
+
hoverTooltip: t.BooleanC;
|
53
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
54
|
+
}>]>]>;
|
55
|
+
export declare const WebhookTemplateV: t.IntersectionC<[t.TypeC<{
|
56
|
+
type: t.LiteralC<"webhook">;
|
57
|
+
value: t.StringC;
|
58
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
59
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
60
|
+
object: t.StringC;
|
61
|
+
hoverTooltip: t.BooleanC;
|
62
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
63
|
+
}>]>]>;
|
64
|
+
export declare const ScriptTemplateV: t.IntersectionC<[t.TypeC<{
|
65
|
+
type: t.LiteralC<"script">;
|
66
|
+
value: t.StringC;
|
67
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
68
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
69
|
+
object: t.StringC;
|
70
|
+
hoverTooltip: t.BooleanC;
|
71
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
72
|
+
}>]>]>;
|
73
|
+
export declare const TemplateV: t.UnionC<[t.IntersectionC<[t.TypeC<{
|
74
|
+
type: t.LiteralC<"admin">;
|
75
|
+
value: t.StringC;
|
76
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
77
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
78
|
+
object: t.StringC;
|
79
|
+
hoverTooltip: t.BooleanC;
|
80
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
81
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
82
|
+
type: t.LiteralC<"callback">;
|
83
|
+
value: t.StringC;
|
84
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
85
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
86
|
+
object: t.StringC;
|
87
|
+
hoverTooltip: t.BooleanC;
|
88
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
89
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
90
|
+
type: t.LiteralC<"link">;
|
91
|
+
value: t.StringC;
|
92
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
93
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
94
|
+
object: t.StringC;
|
95
|
+
hoverTooltip: t.BooleanC;
|
96
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
97
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
98
|
+
type: t.UnionC<[t.LiteralC<"click">, t.LiteralC<"clickBySelector">, t.LiteralC<"clickByXpath">]>;
|
99
|
+
value: t.ArrayC<t.StringC>;
|
100
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
101
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
102
|
+
object: t.StringC;
|
103
|
+
hoverTooltip: t.BooleanC;
|
104
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
105
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
106
|
+
type: t.LiteralC<"builtin">;
|
107
|
+
value: t.StringC;
|
108
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
109
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
110
|
+
object: t.StringC;
|
111
|
+
hoverTooltip: t.BooleanC;
|
112
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
113
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
114
|
+
type: t.LiteralC<"webhook">;
|
115
|
+
value: t.StringC;
|
116
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
117
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
118
|
+
object: t.StringC;
|
119
|
+
hoverTooltip: t.BooleanC;
|
120
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
121
|
+
}>]>]>, t.IntersectionC<[t.TypeC<{
|
122
|
+
type: t.LiteralC<"script">;
|
123
|
+
value: t.StringC;
|
124
|
+
}>, t.IntersectionC<[t.TypeC<{}>, t.PartialC<{
|
125
|
+
commandType: t.UnionC<[t.LiteralC<"independent">, t.LiteralC<"object">, t.LiteralC<"help">]>;
|
126
|
+
object: t.StringC;
|
127
|
+
hoverTooltip: t.BooleanC;
|
128
|
+
operation: t.UnionC<[t.LiteralC<"router">, t.LiteralC<"self">, t.LiteralC<"blank">, t.UndefinedC]>;
|
129
|
+
}>]>]>]>;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { _dispose, _disposed } from '../client/symbols';
|
2
|
+
export declare type PublicDisposable = {
|
3
|
+
dispose: VoidFunction;
|
4
|
+
_disposed?: boolean;
|
5
|
+
};
|
6
|
+
export declare type PrivateDisposable = {
|
7
|
+
[_dispose]: VoidFunction;
|
8
|
+
[_disposed]?: boolean;
|
9
|
+
};
|
10
|
+
export declare type Disposable = undefined | PublicDisposable | PrivateDisposable;
|
11
|
+
export declare const isDisposable: (x: unknown) => x is Disposable;
|
12
|
+
/**
|
13
|
+
* Determines if the provided value is "disposed". A value is considered "disposed" if it is an object with the
|
14
|
+
* _disposed property or symbol symbol set to true, or if the actual value is undefined.
|
15
|
+
*/
|
16
|
+
export declare const isDisposed: (x: unknown) => boolean;
|
17
|
+
export declare function dispose(x: Disposable): void;
|
package/package.json
CHANGED
@@ -1,27 +1,25 @@
|
|
1
1
|
{
|
2
2
|
"name": "commandbar",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.4.1",
|
4
4
|
"description": "Javascript Utility for CommandBar",
|
5
|
-
"main": "build/index.js",
|
6
|
-
"types": "build/index.d.
|
5
|
+
"main": "build/commandbar-js/src/index.js",
|
6
|
+
"types": "build/commandbar-js/src/index.d.ts",
|
7
7
|
"sideEffects": false,
|
8
8
|
"scripts": {
|
9
9
|
"clean": "rimraf build",
|
10
|
-
"build": "
|
10
|
+
"build": "webpack build && tsc",
|
11
|
+
"minify-snippet": "ts-node scripts/minify-snippet.ts",
|
11
12
|
"prepublishOnly": "yarn run clean && yarn run build",
|
12
13
|
"test": "jest --runInBand",
|
13
|
-
"test:watch": "jest --watch --verbose false --silent false"
|
14
|
+
"test:watch": "jest --watch --verbose false --silent false",
|
15
|
+
"watch": "scripts/watch.ts"
|
14
16
|
},
|
15
17
|
"keywords": [],
|
16
18
|
"author": "",
|
17
19
|
"license": "ISC",
|
18
|
-
"dependencies": {
|
19
|
-
|
20
|
-
"
|
21
|
-
|
22
|
-
|
23
|
-
"ts-jest": "^26.5.4",
|
24
|
-
"ts-node": "^9.1.1",
|
25
|
-
"typescript": "^3.9"
|
26
|
-
}
|
20
|
+
"dependencies": {
|
21
|
+
"fp-ts": "2.10.5",
|
22
|
+
"io-ts": "2.2.13"
|
23
|
+
},
|
24
|
+
"devDependencies": {}
|
27
25
|
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ts-node
|
2
|
+
|
3
|
+
import * as ts from 'typescript';
|
4
|
+
import { snippet } from '../src/snippet';
|
5
|
+
import { minify } from 'terser';
|
6
|
+
|
7
|
+
const result = ts.transpileModule(snippet.toString(), {
|
8
|
+
compilerOptions: {
|
9
|
+
alwaysStrict: false,
|
10
|
+
declaration: false,
|
11
|
+
lib: ['DOM', 'ES2015'],
|
12
|
+
module: ts.ModuleKind.None,
|
13
|
+
noEmitOnError: true,
|
14
|
+
removeComments: true,
|
15
|
+
sourceMap: false,
|
16
|
+
strict: true,
|
17
|
+
target: ts.ScriptTarget.ES5,
|
18
|
+
},
|
19
|
+
});
|
20
|
+
|
21
|
+
if (result.diagnostics && result.diagnostics.length > 0) {
|
22
|
+
result.diagnostics?.forEach((d) => console.error(d.messageText));
|
23
|
+
process.exit(1);
|
24
|
+
}
|
25
|
+
|
26
|
+
const lines = result.outputText.split('\n');
|
27
|
+
const transpiled = ["var org = '<org_id>';"].concat(lines.slice(1, lines.length - 2)).join('\n');
|
28
|
+
|
29
|
+
minify(transpiled, { mangle: { toplevel: true } })
|
30
|
+
.then((result) => {
|
31
|
+
console.log(result.code);
|
32
|
+
})
|
33
|
+
.catch((err) => {
|
34
|
+
console.error(err);
|
35
|
+
process.exit(1);
|
36
|
+
});
|
package/scripts/watch.ts
ADDED
package/src/index.ts
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
-
import
|
1
|
+
import { CommandBarClientSDK } from '../../internal/src/client/CommandBarClientSDK';
|
2
2
|
|
3
|
-
export { init
|
3
|
+
export { default as init } from './init';
|
4
|
+
export { initProxySDK as initProxy } from '../../internal/src/client/proxy';
|
5
|
+
export { snippet } from './snippet';
|
6
|
+
export { CommandBarClientSDK };
|
7
|
+
|
8
|
+
declare global {
|
9
|
+
interface Window {
|
10
|
+
CommandBar: CommandBarClientSDK;
|
11
|
+
}
|
12
|
+
}
|
package/src/init.ts
CHANGED
@@ -1,67 +1,14 @@
|
|
1
|
-
import
|
2
|
-
import
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
interpolate(templates: { [k: string]: string }): string;
|
7
|
-
}
|
8
|
-
}
|
9
|
-
|
10
|
-
// eslint-disable-next-line no-extend-native
|
11
|
-
String.prototype.interpolate = function (params) {
|
12
|
-
const names = Object.keys(params);
|
13
|
-
const vals = Object.values(params);
|
14
|
-
// eslint-disable-next-line no-new-func
|
15
|
-
return new Function(...names, `return \`${this}\`;`)(...vals);
|
16
|
-
};
|
17
|
-
|
18
|
-
const prepareSnippet = (snippetString: string, templates: { [k: string]: string }) => {
|
19
|
-
let s = snippetString.interpolate(templates);
|
20
|
-
s = '!(' + s + ')();';
|
21
|
-
return s;
|
22
|
-
};
|
1
|
+
import 'proxy-polyfill';
|
2
|
+
import 'es6-object-assign/auto';
|
3
|
+
import 'es6-symbol/implement';
|
4
|
+
import { getProxySDK } from '../../internal/src/client/proxy';
|
5
|
+
import { _configuration } from '../../internal/src/client/symbols';
|
23
6
|
|
24
7
|
interface IInitOptions {
|
25
8
|
debug?: boolean;
|
26
|
-
version?: string;
|
27
9
|
}
|
28
10
|
|
29
|
-
|
30
|
-
q: unknown[];
|
31
|
-
};
|
32
|
-
|
33
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
34
|
-
const hasProp = <T extends object>(target: T, prop: string | number | symbol): prop is keyof T => prop in target;
|
35
|
-
|
36
|
-
export const initProxy = () => {
|
37
|
-
if (window.CommandBar === undefined || window.CommandBar._disposed === true) {
|
38
|
-
// @ts-expect-error: Temporarily ignore CommandBarProxy definition
|
39
|
-
let existingQueue = Array.isArray(window.CommandBar?.q) ? [...window.CommandBar.q] : [];
|
40
|
-
existingQueue = existingQueue.filter((item) => {
|
41
|
-
return item.length > 0 && item[0] !== 'dispose';
|
42
|
-
});
|
43
|
-
|
44
|
-
const cb: CommandBarProxyApi = {
|
45
|
-
q: existingQueue,
|
46
|
-
};
|
47
|
-
|
48
|
-
window.CommandBar = new Proxy(cb, {
|
49
|
-
get: function (_, prop) {
|
50
|
-
if (hasProp(cb, prop)) return cb[prop];
|
51
|
-
return function () {
|
52
|
-
// eslint-disable-next-line prefer-rest-params
|
53
|
-
const a = Array.prototype.slice.call(arguments);
|
54
|
-
a.unshift(prop);
|
55
|
-
cb.q.push(a);
|
56
|
-
};
|
57
|
-
},
|
58
|
-
}) as CommandBarClientAPI;
|
59
|
-
}
|
60
|
-
|
61
|
-
return window.CommandBar;
|
62
|
-
};
|
63
|
-
|
64
|
-
const getSrc = (org: string, version?: string) => {
|
11
|
+
const getSrc = (org: string) => {
|
65
12
|
let origin = 'https://api.commandbar.com';
|
66
13
|
const params = [];
|
67
14
|
|
@@ -69,6 +16,8 @@ const getSrc = (org: string, version?: string) => {
|
|
69
16
|
if (lc && lc.includes('local')) {
|
70
17
|
// for debugging purposes
|
71
18
|
origin = 'http://localhost:8000';
|
19
|
+
} else if (!lc && org === '10d7dc04') {
|
20
|
+
origin = 'https://api-cu.commandbar.com';
|
72
21
|
}
|
73
22
|
|
74
23
|
let src = origin + '/latest/' + org;
|
@@ -77,18 +26,20 @@ const getSrc = (org: string, version?: string) => {
|
|
77
26
|
params.push('lc=' + lc);
|
78
27
|
}
|
79
28
|
|
80
|
-
|
81
|
-
|
82
|
-
}
|
29
|
+
const version = 2;
|
30
|
+
params.push('version=' + version);
|
83
31
|
|
84
32
|
src = src + '?' + params.join('&');
|
85
33
|
return src;
|
86
34
|
};
|
87
35
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
89
|
-
let loadOrg = () => {};
|
90
|
-
|
91
36
|
const loadLatest = (org: string) => {
|
37
|
+
if (document.readyState !== 'complete') {
|
38
|
+
// NOTE: `once` is not supported by IE11 and this will cause a (minor!) memory leak.
|
39
|
+
window.addEventListener('load', loadLatest.bind(null, org), { capture: false, once: true });
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
|
92
43
|
const src = getSrc(org);
|
93
44
|
|
94
45
|
const el = document.createElement('script');
|
@@ -96,12 +47,19 @@ const loadLatest = (org: string) => {
|
|
96
47
|
el.async = true;
|
97
48
|
el.src = src;
|
98
49
|
document.head.appendChild(el);
|
99
|
-
|
100
|
-
window.removeEventListener('load', loadOrg, false);
|
101
50
|
};
|
102
51
|
|
103
|
-
const DEFAULT_OPTS = { debug: false
|
104
|
-
|
52
|
+
const DEFAULT_OPTS = { debug: false };
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Initializes CommandBar and injects the scripts required to load it into the <head> of the document. After calling
|
56
|
+
* this function it will be possible to access window.CommandBar and call the SDK methods, even if the scripts have not
|
57
|
+
* finished loading yet.
|
58
|
+
*
|
59
|
+
* @param {string} org Your organization ID, which can be found [here](https://app.commandbar.com/docs/getting-started/installation#option-b:-use-npm-or-yarn).
|
60
|
+
* @param {IInitOptions} [opts] Additional options to use for initialization: `debug` will enable additional logging
|
61
|
+
* output.
|
62
|
+
*/
|
105
63
|
const init = (org: string, opts: IInitOptions = DEFAULT_OPTS) => {
|
106
64
|
const config = { ...DEFAULT_OPTS, ...opts };
|
107
65
|
|
@@ -112,25 +70,8 @@ const init = (org: string, opts: IInitOptions = DEFAULT_OPTS) => {
|
|
112
70
|
|
113
71
|
config.debug && console.log('CommandBar init...');
|
114
72
|
|
115
|
-
|
116
|
-
|
117
|
-
loadOrg = () => loadLatest(org);
|
118
|
-
|
119
|
-
window.addEventListener('load', loadOrg, false);
|
120
|
-
};
|
121
|
-
|
122
|
-
export const presentSnippet = (org: string) => {
|
123
|
-
const snippetString = prepareSnippet(snippet.toString(), { org, version: '' });
|
124
|
-
const trimmedSnippet = snippetString
|
125
|
-
.split('\n')
|
126
|
-
.map((line: string) => {
|
127
|
-
return line.trim();
|
128
|
-
})
|
129
|
-
.join('');
|
130
|
-
|
131
|
-
return `<script>
|
132
|
-
${trimmedSnippet}
|
133
|
-
</script>`;
|
73
|
+
getProxySDK()[_configuration] = { uuid: org };
|
74
|
+
loadLatest(org);
|
134
75
|
};
|
135
76
|
|
136
77
|
export default init;
|
package/src/snippet.ts
CHANGED
@@ -1,57 +1,69 @@
|
|
1
|
-
/* eslint-disable prefer-rest-params */
|
2
1
|
/* eslint-disable no-template-curly-in-string */
|
3
|
-
|
4
|
-
|
5
|
-
export const snippet = () => {
|
6
|
-
const
|
7
|
-
const
|
8
|
-
cb.q = [];
|
9
|
-
window.CommandBar = new Proxy(cb, {
|
10
|
-
get: function (f, n) {
|
11
|
-
if (n in f) {
|
12
|
-
return f[n];
|
13
|
-
}
|
14
|
-
return function () {
|
15
|
-
const a = Array.prototype.slice.call(arguments);
|
16
|
-
a.unshift(n);
|
17
|
-
cb.q.push(a);
|
18
|
-
};
|
19
|
-
},
|
20
|
-
});
|
21
|
-
|
22
|
-
const load = function () {
|
23
|
-
let origin = 'https://api.commandbar.com';
|
24
|
-
const params = [];
|
2
|
+
/* eslint-disable prefer-rest-params */
|
3
|
+
/* eslint-disable @typescript-eslint/no-inferrable-types */
|
4
|
+
export const snippet = (org: string) => {
|
5
|
+
const polyfills = ['Object.assign', 'Symbol', 'Symbol.for'].join('%2C');
|
6
|
+
const w = window as unknown as Record<string, unknown>;
|
25
7
|
|
26
|
-
|
27
|
-
if (
|
28
|
-
|
29
|
-
origin = 'http://localhost:8000';
|
8
|
+
function loadScript(src: string, async = false) {
|
9
|
+
if (document.readyState !== 'complete') {
|
10
|
+
window.addEventListener('load', loadScript.bind(null, src, async), { capture: false, once: true });
|
30
11
|
}
|
12
|
+
const el = document.createElement('script');
|
13
|
+
el.type = 'text/javascript';
|
14
|
+
el.async = async;
|
15
|
+
el.src = src;
|
16
|
+
document.head.appendChild(el);
|
17
|
+
}
|
31
18
|
|
32
|
-
|
19
|
+
function bootstrap() {
|
20
|
+
if (w.CommandBar !== undefined) return;
|
21
|
+
delete w.__CommandBarBootstrap__;
|
33
22
|
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
const _configuration = Symbol.for('CommandBar::configuration');
|
24
|
+
const _orgConfig = Symbol.for('CommandBar::orgConfig');
|
25
|
+
const _disposed = Symbol.for('CommandBar::disposed');
|
26
|
+
const _isProxy = Symbol.for('CommandBar::isProxy');
|
27
|
+
const _queue = Symbol.for('CommandBar::queue');
|
28
|
+
const _unwrap = Symbol.for('CommandBar::unwrap');
|
29
|
+
const params = [];
|
30
|
+
const lc = localStorage.getItem('commandbar.lc');
|
31
|
+
const origin = lc && lc.includes('local') ? 'http://localhost:8000' : 'https://api.commandbar.com';
|
37
32
|
|
38
|
-
const
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
const proxy = Object.assign(
|
34
|
+
{
|
35
|
+
[_configuration]: { uuid: org },
|
36
|
+
[_orgConfig]: {},
|
37
|
+
[_disposed]: false,
|
38
|
+
[_isProxy]: true,
|
39
|
+
[_queue]: new Array<unknown>(),
|
40
|
+
[_unwrap]: () => proxy,
|
41
|
+
},
|
42
|
+
w.CommandBar,
|
43
|
+
);
|
44
|
+
w.CommandBar = new Proxy(proxy, {
|
45
|
+
get: function (_, prop: keyof typeof proxy) {
|
46
|
+
if (prop in proxy) return proxy[prop];
|
47
|
+
return function () {
|
48
|
+
const a = Array.prototype.slice.call(arguments);
|
49
|
+
a.unshift(prop);
|
50
|
+
(proxy[_queue] as Array<unknown>).push(a);
|
51
|
+
};
|
52
|
+
},
|
53
|
+
});
|
42
54
|
|
43
|
-
|
55
|
+
if (lc !== null) params.push(`lc=${lc}`);
|
56
|
+
params.push('version=2');
|
44
57
|
|
45
|
-
|
46
|
-
|
47
|
-
el.async = true;
|
48
|
-
el.src = src;
|
49
|
-
document.head.appendChild(el);
|
50
|
-
};
|
58
|
+
loadScript(`${origin}/latest/${org}?${params.join('&')}`, true);
|
59
|
+
}
|
51
60
|
|
52
|
-
if (
|
53
|
-
|
61
|
+
if (typeof Object.assign === 'undefined' || typeof Symbol === 'undefined' || typeof Symbol.for === 'undefined') {
|
62
|
+
w.__CommandBarBootstrap__ = bootstrap;
|
63
|
+
loadScript(
|
64
|
+
'https://polyfill.io/v3/polyfill.min.js?version=3.101.0&callback=__CommandBarBootstrap__&features=' + polyfills,
|
65
|
+
);
|
54
66
|
} else {
|
55
|
-
|
67
|
+
bootstrap();
|
56
68
|
}
|
57
69
|
};
|
package/tsconfig.json
CHANGED
@@ -2,10 +2,11 @@
|
|
2
2
|
"include": ["./src"],
|
3
3
|
"compilerOptions": {
|
4
4
|
"declaration": true,
|
5
|
-
"declarationMap":
|
5
|
+
"declarationMap": false,
|
6
|
+
"emitDeclarationOnly": true,
|
6
7
|
"module": "CommonJS",
|
7
8
|
"outDir": "build",
|
8
|
-
"rootDir": "
|
9
|
+
"rootDir": "..",
|
9
10
|
"sourceMap": true,
|
10
11
|
"target": "es5",
|
11
12
|
"lib": ["dom", "esnext"],
|
@@ -17,6 +18,7 @@
|
|
17
18
|
|
18
19
|
"forceConsistentCasingInFileNames": true,
|
19
20
|
"stripInternal": true, // https://www.typescriptlang.org/tsconfig#stripInternal
|
20
|
-
"types": []
|
21
|
+
"types": ["node"],
|
22
|
+
"jsx": "react"
|
21
23
|
}
|
22
24
|
}
|
package/webpack.config.js
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
const
|
2
|
-
const path = require('path')
|
1
|
+
const path = require('path');
|
3
2
|
|
4
3
|
module.exports = {
|
5
4
|
mode: 'production',
|
6
|
-
entry: '
|
5
|
+
entry: path.resolve(__dirname, 'src', 'index.ts'),
|
7
6
|
output: {
|
8
|
-
path: path.resolve(__dirname, '
|
9
|
-
filename: '
|
7
|
+
path: path.resolve(__dirname, 'build', 'commandbar-js', 'src'),
|
8
|
+
filename: 'index.js',
|
10
9
|
library: {
|
11
10
|
type: 'umd',
|
12
11
|
name: 'commandbar',
|
@@ -15,7 +14,7 @@ module.exports = {
|
|
15
14
|
module: {
|
16
15
|
rules: [
|
17
16
|
{
|
18
|
-
test: /\.
|
17
|
+
test: /\.tsx?$/,
|
19
18
|
loader: 'ts-loader',
|
20
19
|
options: {
|
21
20
|
transpileOnly: true,
|
@@ -24,11 +23,7 @@ module.exports = {
|
|
24
23
|
],
|
25
24
|
},
|
26
25
|
resolve: {
|
27
|
-
extensions: ['.ts', '.js', '.json'],
|
26
|
+
extensions: ['.ts', '.js', '.json', '.tsx'],
|
28
27
|
},
|
29
|
-
|
30
|
-
|
31
|
-
process: 'process/browser',
|
32
|
-
}),
|
33
|
-
],
|
34
|
-
}
|
28
|
+
stats: 'minimal',
|
29
|
+
};
|