@sitecore-jss/sitecore-jss-dev-tools 22.5.0-beta.11 → 22.5.0-beta.12

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.
@@ -38,6 +38,9 @@ const fetchBearerToken = () => __awaiter(void 0, void 0, void 0, function* () {
38
38
  grant_type: 'client_credentials',
39
39
  }),
40
40
  });
41
+ if (!authenticateResponse.ok) {
42
+ throw new Error(`Status: ${authenticateResponse.status} Mesage: ${authenticateResponse.statusText}`);
43
+ }
41
44
  const jsonResponse = yield authenticateResponse.json();
42
45
  return jsonResponse.access_token;
43
46
  }
@@ -12,41 +12,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.extractComponents = extractComponents;
15
+ exports.extractFiles = extractFiles;
16
16
  const utils_1 = require("./utils");
17
17
  const fetch_bearer_token_1 = require("../auth/fetch-bearer-token");
18
18
  const chalk_1 = __importDefault(require("chalk"));
19
+ const path_1 = __importDefault(require("path"));
19
20
  /**
20
21
  * Handler for the extract-component API command
21
22
  * Reads imports from the componentBuilder.ts file and posts the code to the mesh endpoint
22
- * @param {ExtractComponentOptions} [args] - The options for code extraction
23
+ * @param {ExtracFilesOptions} [args] - The options for code extraction
23
24
  * @returns {Promise<void>} void
24
25
  */
25
- function extractComponents() {
26
+ function extractFiles() {
26
27
  return __awaiter(this, arguments, void 0, function* (args = {}) {
27
28
  if (!validateDeployContext()) {
28
29
  console.log(chalk_1.default.yellow('Skipping code extraction, not in deploy context'));
29
30
  return;
30
31
  }
31
- // TODO: add alternative consent procedure when refining later
32
+ // TODO: add alternative consent procedure
32
33
  if (!process.env.EXTRACT_CONSENT) {
33
34
  console.log(chalk_1.default.yellow('Skipping code extraction, EXTRACT_CONSENT is not set'));
34
35
  return;
35
36
  }
36
37
  const basePath = process.cwd();
37
38
  try {
38
- const bearer = yield (0, fetch_bearer_token_1.fetchBearerToken)();
39
- if (!bearer) {
39
+ const token = yield (0, fetch_bearer_token_1.fetchBearerToken)();
40
+ if (!token) {
40
41
  console.error(chalk_1.default.red('Failed to get bearer token, aborting code extraction'));
41
42
  return;
42
43
  }
43
44
  const componentPaths = yield (0, utils_1.resolveComponentImportFiles)(basePath, args.componentBuilderPath);
44
- const codeDispatches = Array.from(componentPaths, (mapEntry) => (0, utils_1.sendCode)({
45
+ const fileDispatches = Array.from(componentPaths, (mapEntry) => (0, utils_1.sendCode)({
45
46
  name: mapEntry[0],
46
47
  path: mapEntry[1],
47
48
  type: utils_1.ExtractedFileType.Component,
48
- }, bearer));
49
- yield Promise.all(codeDispatches);
49
+ }, token));
50
+ fileDispatches.push((0, utils_1.sendCode)({
51
+ name: 'package.json',
52
+ path: path_1.default.resolve(basePath, './package.json'),
53
+ type: utils_1.ExtractedFileType.PackageJson,
54
+ }, token));
55
+ yield Promise.all(fileDispatches);
50
56
  }
51
57
  catch (error) {
52
58
  console.error(chalk_1.default.red('Error during component extraction:', error));
@@ -41,9 +41,10 @@ const path_1 = __importDefault(require("path"));
41
41
  const fs_1 = __importDefault(require("fs"));
42
42
  const ts = __importStar(require("typescript"));
43
43
  const sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
44
- // TODO:adjust when mesh endpoint is live
45
- const meshEndpoint = `${process.env.SITECORE_EDGE_URL ||
46
- sitecore_jss_1.constants.SITECORE_EDGE_URL_DEFAULT}/api/v1/mesh`;
44
+ // MESH_URL is temporary option to use until mesh is onboarded into Edge Proxy
45
+ const meshEndpoint = `${process.env.SITECORE_MESH_URL ||
46
+ process.env.SITECORE_EDGE_URL ||
47
+ sitecore_jss_1.constants.SITECORE_EDGE_URL_DEFAULT}/api/v1/contentsdk/code/extracted`;
47
48
  /**
48
49
  * Type of file to be sent to the mesh endpoint
49
50
  */
@@ -51,7 +52,7 @@ var ExtractedFileType;
51
52
  (function (ExtractedFileType) {
52
53
  ExtractedFileType["Component"] = "component";
53
54
  ExtractedFileType["Json"] = "json";
54
- ExtractedFileType["Package"] = "package.json";
55
+ ExtractedFileType["PackageJson"] = "package.json";
55
56
  })(ExtractedFileType || (exports.ExtractedFileType = ExtractedFileType = {}));
56
57
  /**
57
58
  * Parses the componentBuilder.ts file and returns a map of component names
@@ -99,8 +100,13 @@ const resolveComponentImportFiles = (appPath, componentBuilderPath = './src/temp
99
100
  const resolvedModule = ts.nodeModuleNameResolver(moduleName, componentBuilderFullPath, tsOptions, tsHost);
100
101
  const resolvedFile = (_a = resolvedModule === null || resolvedModule === void 0 ? void 0 : resolvedModule.resolvedModule) === null || _a === void 0 ? void 0 : _a.resolvedFileName;
101
102
  // module imports paths will be resolved to /node_modules location - we don't support that yet
102
- if (resolvedFile && resolvedFile.indexOf('node_modules') === -1) {
103
- importStringsMap[childNode.importClause.getText()] = path_1.default.resolve(resolvedFile);
103
+ if (resolvedFile) {
104
+ if (resolvedFile.indexOf('node_modules') === -1 && !resolvedFile.endsWith('.d.ts')) {
105
+ importStringsMap[childNode.importClause.getText()] = path_1.default.resolve(resolvedFile);
106
+ }
107
+ }
108
+ else {
109
+ console.warn('Could not resolve a file for import %s', moduleName);
104
110
  }
105
111
  }
106
112
  else if (ts.isExpressionStatement(childNode)) {
@@ -149,27 +155,38 @@ const sendCode = (file, token) => __awaiter(void 0, void 0, void 0, function* ()
149
155
  return;
150
156
  }
151
157
  const code = fs_1.default.readFileSync(file.path);
152
- const response = yield fetch(meshEndpoint, {
153
- method: 'POST',
154
- headers: {
155
- Authorization: `Bearer ${token}`,
156
- 'Content-Type': 'application/json',
157
- },
158
- body: JSON.stringify({
159
- name: file.name,
160
- content: code.toString(),
161
- labels: {
162
- properties: {
158
+ try {
159
+ const response = yield fetch(meshEndpoint, {
160
+ method: 'POST',
161
+ headers: {
162
+ Authorization: `Bearer ${token}`,
163
+ 'Content-Type': 'application/json',
164
+ },
165
+ body: JSON.stringify({
166
+ // EnvironmentId can have any value - but it's required
167
+ EnvironmentId: 'JSS',
168
+ name: file.name,
169
+ content: code.toString(),
170
+ labels: {
163
171
  type: file.type,
164
172
  },
165
- },
166
- }),
167
- });
168
- if (!response.ok) {
169
- console.error(chalk_1.default.red(`Failed to send extracted code from ${file.path}: ${response.statusText}`));
173
+ }),
174
+ });
175
+ if (!response.ok) {
176
+ console.error(chalk_1.default.red(`Failed to send extracted code from ${file.path}: ${response.statusText}`));
177
+ sitecore_jss_1.debug.http('Error details: %o', {
178
+ status: response.status,
179
+ text: yield response.text(),
180
+ url: response.url,
181
+ headers: response.headers,
182
+ });
183
+ return;
184
+ }
170
185
  }
171
- else {
172
- console.log(chalk_1.default.green(`Code from ${file.path} extracted and sent to mesh endpoint`));
186
+ catch (error) {
187
+ console.error(chalk_1.default.red(`Fetch request to send extracted code from ${file.path} failed: ${JSON.stringify(error)}`));
188
+ return;
173
189
  }
190
+ console.log(chalk_1.default.green(`Code from ${file.path} extracted and sent to mesh endpoint`));
174
191
  });
175
192
  exports.sendCode = sendCode;
package/dist/cjs/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.extractComponents = exports.fetchBearerToken = exports.constants = exports.resolveScJssConfig = exports.createDefaultDisconnectedServer = exports.createDefaultDocumentMiddleware = exports.createDisconnectedDictionaryService = exports.createDisconnectedLayoutService = exports.createDisconnectedAssetMiddleware = exports.packageGenerate = exports.packageDeploy = exports.clean = exports.deploy = exports.mergeFs = exports.verifySetup = exports.userConfigPath = exports.setup = exports.replaceConfigTokens = void 0;
17
+ exports.extractFiles = exports.fetchBearerToken = exports.constants = exports.resolveScJssConfig = exports.createDefaultDisconnectedServer = exports.createDefaultDocumentMiddleware = exports.createDisconnectedDictionaryService = exports.createDisconnectedLayoutService = exports.createDisconnectedAssetMiddleware = exports.packageGenerate = exports.packageDeploy = exports.clean = exports.deploy = exports.mergeFs = exports.verifySetup = exports.userConfigPath = exports.setup = exports.replaceConfigTokens = void 0;
18
18
  var jss_config_1 = require("./setup/jss-config");
19
19
  Object.defineProperty(exports, "replaceConfigTokens", { enumerable: true, get: function () { return jss_config_1.replaceConfigTokens; } });
20
20
  var setup_1 = require("./setup/setup");
@@ -48,8 +48,8 @@ var sitecore_jss_1 = require("@sitecore-jss/sitecore-jss");
48
48
  Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return sitecore_jss_1.constants; } });
49
49
  var fetch_bearer_token_1 = require("./auth/fetch-bearer-token");
50
50
  Object.defineProperty(exports, "fetchBearerToken", { enumerable: true, get: function () { return fetch_bearer_token_1.fetchBearerToken; } });
51
- var extract_components_1 = require("./codegen/extract-components");
52
- Object.defineProperty(exports, "extractComponents", { enumerable: true, get: function () { return extract_components_1.extractComponents; } });
51
+ var extract_files_1 = require("./codegen/extract-files");
52
+ Object.defineProperty(exports, "extractFiles", { enumerable: true, get: function () { return extract_files_1.extractFiles; } });
53
53
  __exportStar(require("./templating"), exports);
54
54
  __exportStar(require("./manifest"), exports);
55
55
  __exportStar(require("./pipelines"), exports);
@@ -32,6 +32,9 @@ export const fetchBearerToken = () => __awaiter(void 0, void 0, void 0, function
32
32
  grant_type: 'client_credentials',
33
33
  }),
34
34
  });
35
+ if (!authenticateResponse.ok) {
36
+ throw new Error(`Status: ${authenticateResponse.status} Mesage: ${authenticateResponse.statusText}`);
37
+ }
35
38
  const jsonResponse = yield authenticateResponse.json();
36
39
  return jsonResponse.access_token;
37
40
  }
@@ -10,37 +10,43 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { ExtractedFileType, resolveComponentImportFiles, sendCode } from './utils';
11
11
  import { fetchBearerToken } from '../auth/fetch-bearer-token';
12
12
  import chalk from 'chalk';
13
+ import path from 'path';
13
14
  /**
14
15
  * Handler for the extract-component API command
15
16
  * Reads imports from the componentBuilder.ts file and posts the code to the mesh endpoint
16
- * @param {ExtractComponentOptions} [args] - The options for code extraction
17
+ * @param {ExtracFilesOptions} [args] - The options for code extraction
17
18
  * @returns {Promise<void>} void
18
19
  */
19
- export function extractComponents() {
20
+ export function extractFiles() {
20
21
  return __awaiter(this, arguments, void 0, function* (args = {}) {
21
22
  if (!validateDeployContext()) {
22
23
  console.log(chalk.yellow('Skipping code extraction, not in deploy context'));
23
24
  return;
24
25
  }
25
- // TODO: add alternative consent procedure when refining later
26
+ // TODO: add alternative consent procedure
26
27
  if (!process.env.EXTRACT_CONSENT) {
27
28
  console.log(chalk.yellow('Skipping code extraction, EXTRACT_CONSENT is not set'));
28
29
  return;
29
30
  }
30
31
  const basePath = process.cwd();
31
32
  try {
32
- const bearer = yield fetchBearerToken();
33
- if (!bearer) {
33
+ const token = yield fetchBearerToken();
34
+ if (!token) {
34
35
  console.error(chalk.red('Failed to get bearer token, aborting code extraction'));
35
36
  return;
36
37
  }
37
38
  const componentPaths = yield resolveComponentImportFiles(basePath, args.componentBuilderPath);
38
- const codeDispatches = Array.from(componentPaths, (mapEntry) => sendCode({
39
+ const fileDispatches = Array.from(componentPaths, (mapEntry) => sendCode({
39
40
  name: mapEntry[0],
40
41
  path: mapEntry[1],
41
42
  type: ExtractedFileType.Component,
42
- }, bearer));
43
- yield Promise.all(codeDispatches);
43
+ }, token));
44
+ fileDispatches.push(sendCode({
45
+ name: 'package.json',
46
+ path: path.resolve(basePath, './package.json'),
47
+ type: ExtractedFileType.PackageJson,
48
+ }, token));
49
+ yield Promise.all(fileDispatches);
44
50
  }
45
51
  catch (error) {
46
52
  console.error(chalk.red('Error during component extraction:', error));
@@ -11,10 +11,11 @@ import chalk from 'chalk';
11
11
  import path from 'path';
12
12
  import fs from 'fs';
13
13
  import * as ts from 'typescript';
14
- import { constants } from '@sitecore-jss/sitecore-jss';
15
- // TODO:adjust when mesh endpoint is live
16
- const meshEndpoint = `${process.env.SITECORE_EDGE_URL ||
17
- constants.SITECORE_EDGE_URL_DEFAULT}/api/v1/mesh`;
14
+ import { constants, debug } from '@sitecore-jss/sitecore-jss';
15
+ // MESH_URL is temporary option to use until mesh is onboarded into Edge Proxy
16
+ const meshEndpoint = `${process.env.SITECORE_MESH_URL ||
17
+ process.env.SITECORE_EDGE_URL ||
18
+ constants.SITECORE_EDGE_URL_DEFAULT}/api/v1/contentsdk/code/extracted`;
18
19
  /**
19
20
  * Type of file to be sent to the mesh endpoint
20
21
  */
@@ -22,7 +23,7 @@ export var ExtractedFileType;
22
23
  (function (ExtractedFileType) {
23
24
  ExtractedFileType["Component"] = "component";
24
25
  ExtractedFileType["Json"] = "json";
25
- ExtractedFileType["Package"] = "package.json";
26
+ ExtractedFileType["PackageJson"] = "package.json";
26
27
  })(ExtractedFileType || (ExtractedFileType = {}));
27
28
  /**
28
29
  * Parses the componentBuilder.ts file and returns a map of component names
@@ -70,8 +71,13 @@ export const resolveComponentImportFiles = (appPath, componentBuilderPath = './s
70
71
  const resolvedModule = ts.nodeModuleNameResolver(moduleName, componentBuilderFullPath, tsOptions, tsHost);
71
72
  const resolvedFile = (_a = resolvedModule === null || resolvedModule === void 0 ? void 0 : resolvedModule.resolvedModule) === null || _a === void 0 ? void 0 : _a.resolvedFileName;
72
73
  // module imports paths will be resolved to /node_modules location - we don't support that yet
73
- if (resolvedFile && resolvedFile.indexOf('node_modules') === -1) {
74
- importStringsMap[childNode.importClause.getText()] = path.resolve(resolvedFile);
74
+ if (resolvedFile) {
75
+ if (resolvedFile.indexOf('node_modules') === -1 && !resolvedFile.endsWith('.d.ts')) {
76
+ importStringsMap[childNode.importClause.getText()] = path.resolve(resolvedFile);
77
+ }
78
+ }
79
+ else {
80
+ console.warn('Could not resolve a file for import %s', moduleName);
75
81
  }
76
82
  }
77
83
  else if (ts.isExpressionStatement(childNode)) {
@@ -119,26 +125,37 @@ export const sendCode = (file, token) => __awaiter(void 0, void 0, void 0, funct
119
125
  return;
120
126
  }
121
127
  const code = fs.readFileSync(file.path);
122
- const response = yield fetch(meshEndpoint, {
123
- method: 'POST',
124
- headers: {
125
- Authorization: `Bearer ${token}`,
126
- 'Content-Type': 'application/json',
127
- },
128
- body: JSON.stringify({
129
- name: file.name,
130
- content: code.toString(),
131
- labels: {
132
- properties: {
128
+ try {
129
+ const response = yield fetch(meshEndpoint, {
130
+ method: 'POST',
131
+ headers: {
132
+ Authorization: `Bearer ${token}`,
133
+ 'Content-Type': 'application/json',
134
+ },
135
+ body: JSON.stringify({
136
+ // EnvironmentId can have any value - but it's required
137
+ EnvironmentId: 'JSS',
138
+ name: file.name,
139
+ content: code.toString(),
140
+ labels: {
133
141
  type: file.type,
134
142
  },
135
- },
136
- }),
137
- });
138
- if (!response.ok) {
139
- console.error(chalk.red(`Failed to send extracted code from ${file.path}: ${response.statusText}`));
143
+ }),
144
+ });
145
+ if (!response.ok) {
146
+ console.error(chalk.red(`Failed to send extracted code from ${file.path}: ${response.statusText}`));
147
+ debug.http('Error details: %o', {
148
+ status: response.status,
149
+ text: yield response.text(),
150
+ url: response.url,
151
+ headers: response.headers,
152
+ });
153
+ return;
154
+ }
140
155
  }
141
- else {
142
- console.log(chalk.green(`Code from ${file.path} extracted and sent to mesh endpoint`));
156
+ catch (error) {
157
+ console.error(chalk.red(`Fetch request to send extracted code from ${file.path} failed: ${JSON.stringify(error)}`));
158
+ return;
143
159
  }
160
+ console.log(chalk.green(`Code from ${file.path} extracted and sent to mesh endpoint`));
144
161
  });
package/dist/esm/index.js CHANGED
@@ -14,7 +14,7 @@ export { createDefaultDisconnectedServer, } from './disconnected-server/create-d
14
14
  export { resolveScJssConfig } from './resolve-scjssconfig';
15
15
  export { constants } from '@sitecore-jss/sitecore-jss';
16
16
  export { fetchBearerToken } from './auth/fetch-bearer-token';
17
- export { extractComponents } from './codegen/extract-components';
17
+ export { extractFiles } from './codegen/extract-files';
18
18
  export * from './templating';
19
19
  export * from './manifest';
20
20
  export * from './pipelines';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sitecore-jss/sitecore-jss-dev-tools",
3
- "version": "22.5.0-beta.11",
3
+ "version": "22.5.0-beta.12",
4
4
  "description": "Utilities to assist in the development and deployment of Sitecore JSS apps.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@babel/parser": "^7.24.0",
36
- "@sitecore-jss/sitecore-jss": "22.5.0-beta.11",
36
+ "@sitecore-jss/sitecore-jss": "22.5.0-beta.12",
37
37
  "chalk": "^4.1.2",
38
38
  "chokidar": "^3.6.0",
39
39
  "del": "^6.0.0",
@@ -85,7 +85,7 @@
85
85
  "typescript": "~5.6.3"
86
86
  },
87
87
  "types": "types/index.d.ts",
88
- "gitHead": "60c1594cdbc7ff5c173965d4b95020778fae1d7f",
88
+ "gitHead": "7e0753049a5b53583287f5b6569a5dc4233745bb",
89
89
  "files": [
90
90
  "dist",
91
91
  "types",
@@ -1,11 +1,11 @@
1
- type ExtractComponentOptions = {
1
+ type ExtracFilesOptions = {
2
2
  componentBuilderPath?: string;
3
3
  };
4
4
  /**
5
5
  * Handler for the extract-component API command
6
6
  * Reads imports from the componentBuilder.ts file and posts the code to the mesh endpoint
7
- * @param {ExtractComponentOptions} [args] - The options for code extraction
7
+ * @param {ExtracFilesOptions} [args] - The options for code extraction
8
8
  * @returns {Promise<void>} void
9
9
  */
10
- export declare function extractComponents(args?: ExtractComponentOptions): Promise<void>;
10
+ export declare function extractFiles(args?: ExtracFilesOptions): Promise<void>;
11
11
  export {};
@@ -12,7 +12,7 @@ export type ExtractedFile = {
12
12
  export declare enum ExtractedFileType {
13
13
  Component = "component",
14
14
  Json = "json",
15
- Package = "package.json"
15
+ PackageJson = "package.json"
16
16
  }
17
17
  /**
18
18
  * Parses the componentBuilder.ts file and returns a map of component names
package/types/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export { ScJssConfig, JssConfiguration, resolveScJssConfig } from './resolve-scj
16
16
  export { Metadata } from '@sitecore-jss/sitecore-jss/editing';
17
17
  export { constants } from '@sitecore-jss/sitecore-jss';
18
18
  export { fetchBearerToken } from './auth/fetch-bearer-token';
19
- export { extractComponents } from './codegen/extract-components';
19
+ export { extractFiles } from './codegen/extract-files';
20
20
  export * from './templating';
21
21
  export * from './manifest';
22
22
  export * from './pipelines';