@embeddable.com/sdk-core 3.7.0 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/push.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  export declare const YAML_OR_JS_FILES: RegExp;
2
+ export declare const SELF_SERVE_CUSTOM_FILES: RegExp;
2
3
  declare const _default: () => Promise<void>;
3
4
  export default _default;
4
- export declare function archive(ctx: any, yamlFiles: [string, string][], includeBuild?: boolean): Promise<unknown>;
5
+ export declare function archive(ctx: any, yamlFiles: [string, string][], selfServeFiles?: [string, string][], includeBuild?: boolean): Promise<unknown>;
5
6
  export declare function sendBuildByApiKey(ctx: any, { apiKey, email, message }: any): Promise<{
6
7
  bundleId: any;
7
8
  email: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embeddable.com/sdk-core",
3
- "version": "3.7.0",
3
+ "version": "3.7.1",
4
4
  "description": "Core Embeddable SDK module responsible for web-components bundling and publishing.",
5
5
  "keywords": [
6
6
  "embeddable",
@@ -56,6 +56,7 @@ describe("defineConfig", () => {
56
56
  "modelsSrc": "/embeddable-sdk/packages/core-sdk",
57
57
  "rollupOptions": {},
58
58
  "rootDir": "/embeddable-sdk/packages/core-sdk",
59
+ "selfServeCustomizationDir": "/embeddable-sdk/packages/core-sdk",
59
60
  "srcDir": "/embeddable-sdk/packages/core-sdk",
60
61
  "stencilBuild": "/embeddable-sdk/packages/core-sdk",
61
62
  "tmpDir": "/embeddable-sdk/packages/core-sdk",
@@ -19,6 +19,7 @@ export type EmbeddableConfig = {
19
19
  previewBaseUrl?: string;
20
20
  componentsSrc?: string;
21
21
  modelsSrc?: string;
22
+ selfServeCustomizationSrc?: string;
22
23
  viteConfig?: {
23
24
  resolve?: {
24
25
  alias?: Record<string, string>;
@@ -39,6 +40,7 @@ export default ({
39
40
  previewBaseUrl,
40
41
  modelsSrc = "src",
41
42
  componentsSrc = "src",
43
+ selfServeCustomizationSrc = "src/self-serve-customization",
42
44
  viteConfig = {},
43
45
  rollupOptions = {},
44
46
  }: EmbeddableConfig) => {
@@ -75,6 +77,10 @@ export default ({
75
77
  modelsSrc: modelsSrc ? path.resolve(clientRoot, modelsSrc) : undefined,
76
78
  buildDir: path.resolve(clientRoot, ".embeddable-build"),
77
79
  tmpDir: path.resolve(clientRoot, ".embeddable-tmp"),
80
+ selfServeCustomizationDir: path.resolve(
81
+ clientRoot,
82
+ selfServeCustomizationSrc,
83
+ ),
78
84
  componentDir: path.resolve(clientRoot, ".embeddable-build", "component"),
79
85
  stencilBuild: path.resolve(
80
86
  clientRoot,
package/src/dev.ts CHANGED
@@ -36,6 +36,7 @@ let previewWorkspace: string;
36
36
 
37
37
  const SERVER_PORT = 8926;
38
38
  const BUILD_DEV_DIR = ".embeddable-dev-build";
39
+ const SELF_SERVE_CUSTOMIZATION_REQUEST_URL = "/self-serve-customization";
39
40
 
40
41
  const buildWebComponent = async (config: any) => {
41
42
  await generate(config, "sdk-react");
@@ -93,6 +94,7 @@ export default async () => {
93
94
  const serveStatic = require("serve-static");
94
95
 
95
96
  const serve = serveStatic(config.client.buildDir);
97
+ const serveSelfeServe = serveStatic(config.client.selfServeCustomizationDir);
96
98
 
97
99
  const workspacePreparation = ora("Preparing workspace...").start();
98
100
 
@@ -125,7 +127,19 @@ export default async () => {
125
127
  }
126
128
 
127
129
  const done = finalhandler(request, res);
128
- serve(request, res, done);
130
+
131
+ const selectedServe = request.url?.startsWith(
132
+ SELF_SERVE_CUSTOMIZATION_REQUEST_URL,
133
+ )
134
+ ? serveSelfeServe
135
+ : serve;
136
+
137
+ request.url = request.url?.replace(
138
+ SELF_SERVE_CUSTOMIZATION_REQUEST_URL,
139
+ "",
140
+ );
141
+
142
+ selectedServe(request, res, done);
129
143
  },
130
144
  );
131
145
  wss = new WebSocketServer({ server });
@@ -165,7 +179,10 @@ export default async () => {
165
179
 
166
180
  const dataModelAndSecurityContextWatch =
167
181
  dataModelAndSecurityContextWatcher(config);
182
+
183
+ const customSelfServeWatch = customSelfServeWatcher(config);
168
184
  watchers.push(dataModelAndSecurityContextWatch);
185
+ watchers.push(customSelfServeWatch);
169
186
  });
170
187
  };
171
188
 
@@ -237,6 +254,24 @@ const dataModelAndSecurityContextWatcher = (ctx: any): FSWatcher => {
237
254
  return fsWatcher;
238
255
  };
239
256
 
257
+ const customSelfServeWatcher = (ctx: any): FSWatcher => {
258
+ const fsWatcher = chokidar.watch(
259
+ [
260
+ path.resolve(ctx.client.selfServeCustomizationDir, "style.css"),
261
+ path.resolve(ctx.client.selfServeCustomizationDir, "*.svg"),
262
+ ],
263
+ {
264
+ ignoreInitial: true,
265
+ },
266
+ );
267
+
268
+ fsWatcher.on("all", async () => {
269
+ sendMessage("customSelfServeUpdateSuccess");
270
+ });
271
+
272
+ return fsWatcher;
273
+ };
274
+
240
275
  const sendDataModelsAndSecurityContextsChanges = async (ctx: any) => {
241
276
  sendMessage("dataModelsAndOrSecurityContextUpdateStart");
242
277
  const isValid = await validate(ctx, false);
@@ -253,7 +288,7 @@ const sendDataModelsAndSecurityContextsChanges = async (ctx: any) => {
253
288
  path.resolve(ctx.client.buildDir, "embeddable-manifest.json"),
254
289
  ]);
255
290
 
256
- await archive(ctx, filesList, false);
291
+ await archive(ctx, filesList, [], false);
257
292
  await sendBuild(ctx, { workspaceId: previewWorkspace, token });
258
293
  sending.succeed(`Data models and/or security context synchronized`);
259
294
  sendMessage("dataModelsAndOrSecurityContextUpdateSuccess");
package/src/push.ts CHANGED
@@ -15,6 +15,11 @@ import { checkBuildSuccess, checkNodeVersion, getArgumentByKey } from "./utils";
15
15
  // grab .cube.yml|js and .sc.yml|js files
16
16
  export const YAML_OR_JS_FILES = /^(.*)\.(cube|sc)\.(ya?ml|js)$/;
17
17
 
18
+ // grab all files in self-serve-customization folder
19
+ export const SELF_SERVE_CUSTOM_FILES = /^(style\.css|.*\.svg)$/;
20
+
21
+ const customSelfServeFolder = "self-serve-customization/";
22
+
18
23
  let ora: any;
19
24
  export default async () => {
20
25
  let spinnerPushing;
@@ -170,13 +175,19 @@ async function buildArchive(config: any) {
170
175
  YAML_OR_JS_FILES,
171
176
  );
172
177
 
173
- await archive(config, filesList);
178
+ const selfServeFiles = await findFiles(
179
+ `${config.client.selfServeCustomizationDir}`,
180
+ SELF_SERVE_CUSTOM_FILES,
181
+ );
182
+
183
+ await archive(config, filesList, selfServeFiles);
174
184
  return spinnerArchive.succeed("Bundling completed");
175
185
  }
176
186
 
177
187
  export async function archive(
178
188
  ctx: any,
179
189
  yamlFiles: [string, string][],
190
+ selfServeFiles: [string, string][] = [],
180
191
  includeBuild: boolean = true,
181
192
  ) {
182
193
  const output = fsSync.createWriteStream(ctx.client.archiveFile);
@@ -198,6 +209,16 @@ export async function archive(
198
209
  });
199
210
  }
200
211
 
212
+ if (selfServeFiles.length > 0) {
213
+ for (const fileData of selfServeFiles) {
214
+ const fileName = fileData[1].split("/").pop();
215
+
216
+ _archiver.file(fileData[1], {
217
+ name: `${customSelfServeFolder}${fileName!}`,
218
+ });
219
+ }
220
+ }
221
+
201
222
  await _archiver.finalize();
202
223
 
203
224
  return new Promise((resolve, _reject) => {