@slicemachine/manager 0.1.1-dev-plugins.11 → 0.1.1-dev-plugins.13
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/README.md +85 -0
- package/dist/constants/API_ENDPOINTS.cjs.map +1 -1
- package/dist/constants/API_ENDPOINTS.d.ts +1 -2
- package/dist/constants/API_ENDPOINTS.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.cjs +9 -0
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.cjs.map +1 -0
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.d.ts +4 -0
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.js +9 -0
- package/dist/lib/buildPrismicRepositoryAPIEndpoint.js.map +1 -0
- package/dist/lib/decodePackageJSON.cjs +29 -0
- package/dist/lib/decodePackageJSON.cjs.map +1 -0
- package/dist/lib/decodePackageJSON.d.ts +12 -0
- package/dist/lib/decodePackageJSON.js +12 -0
- package/dist/lib/decodePackageJSON.js.map +1 -0
- package/dist/lib/locateFileUpward.cjs +8 -11
- package/dist/lib/locateFileUpward.cjs.map +1 -1
- package/dist/lib/locateFileUpward.js +8 -11
- package/dist/lib/locateFileUpward.js.map +1 -1
- package/dist/managers/SliceMachineManager.cjs +17 -11
- package/dist/managers/SliceMachineManager.cjs.map +1 -1
- package/dist/managers/SliceMachineManager.d.ts +6 -0
- package/dist/managers/SliceMachineManager.js +17 -11
- package/dist/managers/SliceMachineManager.js.map +1 -1
- package/dist/managers/createSliceMachineManager.cjs +2 -2
- package/dist/managers/createSliceMachineManager.cjs.map +1 -1
- package/dist/managers/createSliceMachineManager.d.ts +4 -3
- package/dist/managers/createSliceMachineManager.js +2 -2
- package/dist/managers/createSliceMachineManager.js.map +1 -1
- package/dist/managers/slices/SlicesManager.cjs +21 -4
- package/dist/managers/slices/SlicesManager.cjs.map +1 -1
- package/dist/managers/slices/SlicesManager.d.ts +1 -1
- package/dist/managers/slices/SlicesManager.js +21 -4
- package/dist/managers/slices/SlicesManager.js.map +1 -1
- package/dist/managers/telemetry/TelemetryManager.cjs +3 -1
- package/dist/managers/telemetry/TelemetryManager.cjs.map +1 -1
- package/dist/managers/telemetry/TelemetryManager.js +3 -1
- package/dist/managers/telemetry/TelemetryManager.js.map +1 -1
- package/dist/managers/user/UserManager.cjs +6 -2
- package/dist/managers/user/UserManager.cjs.map +1 -1
- package/dist/managers/user/UserManager.d.ts +2 -0
- package/dist/managers/user/UserManager.js +6 -2
- package/dist/managers/user/UserManager.js.map +1 -1
- package/dist/managers/versions/VersionsManager.cjs +14 -3
- package/dist/managers/versions/VersionsManager.cjs.map +1 -1
- package/dist/managers/versions/VersionsManager.js +14 -3
- package/dist/managers/versions/VersionsManager.js.map +1 -1
- package/dist/managers/versions/types.d.ts +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +7 -5
- package/src/constants/API_ENDPOINTS.ts +1 -1
- package/src/errors.ts +1 -74
- package/src/lib/buildPrismicRepositoryAPIEndpoint.ts +16 -0
- package/src/lib/decodePackageJSON.ts +18 -0
- package/src/lib/locateFileUpward.ts +8 -12
- package/src/managers/SliceMachineManager.ts +31 -31
- package/src/managers/createSliceMachineManager.ts +3 -3
- package/src/managers/slices/SlicesManager.ts +24 -7
- package/src/managers/telemetry/TelemetryManager.ts +6 -0
- package/src/managers/user/UserManager.ts +12 -0
- package/src/managers/versions/VersionsManager.ts +22 -6
- package/src/managers/versions/types.ts +1 -1
- package/src/types.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryManager.js","sources":["../../../../src/managers/telemetry/TelemetryManager.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\n\nimport SegmentClient from \"analytics-node\";\n\nimport { readPrismicrc } from \"../../lib/prismicrc\";\n\nimport { API_TOKENS } from \"../../constants/API_TOKENS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tHumanSegmentEventType,\n\tHumanSegmentEventTypes,\n\tSegmentEvents,\n} from \"./types\";\n\ntype TelemetryManagerTrackArgs = SegmentEvents;\n\ntype TelemetryManagerIdentifyArgs = {\n\tuserID: string;\n\tintercomHash: string;\n};\n\nfunction assertTelemetryInitialized(\n\tsegmentClient: SegmentClient | undefined,\n): asserts segmentClient is NonNullable<typeof segmentClient> {\n\tif (segmentClient == undefined) {\n\t\tthrow new Error(\n\t\t\t\"Telemetry has not been initialized. Run `SliceMachineManager.telemetry.prototype.initTelemetry()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nexport class TelemetryManager extends BaseManager {\n\tprivate _enabled = false;\n\tprivate _segmentClient: SegmentClient | undefined = undefined;\n\tprivate _anonymousID: string | undefined = undefined;\n\tprivate _userID: string | undefined = undefined;\n\n\tasync initTelemetry(): Promise<void> {\n\t\tif (this._segmentClient) {\n\t\t\t// Prevent subsequent initializations.\n\t\t\treturn;\n\t\t}\n\n\t\tlet root: string;\n\t\ttry {\n\t\t\troot = await this.project.getRoot();\n\t\t} catch {\n\t\t\troot = await this.project.suggestRoot();\n\t\t}\n\n\t\tthis._enabled = readPrismicrc(root).telemetry !== false;\n\t\tthis._segmentClient = new SegmentClient(API_TOKENS.SegmentKey, {\n\t\t\t// Since it's a local app, we do not benefit from event batching the way a server would normally do, all tracking event will be awaited.\n\t\t\tflushAt: 1,\n\t\t\t// TODO: Verify that this actually does not send data to Segment when false.\n\t\t\tenable: this._enabled,\n\t\t});\n\t\tthis._anonymousID = randomUUID();\n\t}\n\n\t// TODO: Should `userId` be automatically populated by the logged in\n\t// user? We already have their info via UserRepository.\n\ttrack(args: TelemetryManagerTrackArgs): Promise<void> {\n\t\tconst { event, repository, ...properties } = args;\n\n\t\tconst payload: {\n\t\t\tevent: HumanSegmentEventTypes;\n\t\t\tuserId?: string;\n\t\t\tanonymousId?: string;\n\t\t\tproperties?: Record<string, unknown>;\n\t\t\tcontext?: {\n\t\t\t\tgroupId?: {\n\t\t\t\t\tRepository?: string;\n\t\t\t\t};\n\t\t\t};\n\t\t} = {\n\t\t\tevent: HumanSegmentEventType[event],\n\t\t\tproperties: {\n\t\t\t\trepo: repository,\n\t\t\t\t...properties,\n\t\t\t},\n\t\t};\n\n\t\tif (this._userID) {\n\t\t\tpayload.userId = this._userID;\n\t\t} else {\n\t\t\tpayload.anonymousId = this._anonymousID;\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\tpayload.context ||= {};\n\t\t\tpayload.context.groupId ||= {};\n\t\t\tpayload.context.groupId.Repository = repository;\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tassertTelemetryInitialized(this._segmentClient);\n\n\t\t\t// TODO: Make sure client fails gracefully when no internet connection\n\t\t\tthis._segmentClient.track(payload, (maybeError?: Error) => {\n\t\t\t\tif (maybeError) {\n\t\t\t\t\t// TODO: Not sure how we want to deal with that\n\t\t\t\t\tconsole.warn(`An error occurred during Segment tracking`, maybeError);\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n\n\t// TODO: Should `userID` and `intercomHash` be automatically populated\n\t// by the logged in user? We already have their info via\n\t// UserRepository.\n\tidentify(args: TelemetryManagerIdentifyArgs): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tassertTelemetryInitialized(this._segmentClient);\n\n\t\t\tconst payload = {\n\t\t\t\tuserId: args.userID,\n\t\t\t\tanonymousId: this._anonymousID,\n\t\t\t\tintegrations: {\n\t\t\t\t\tIntercom: {\n\t\t\t\t\t\tuser_hash: args.intercomHash,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tthis._userID = args.userID;\n\n\t\t\t// TODO: Make sure client fails gracefully when no internet connection\n\t\t\tthis._segmentClient.identify(payload, (maybeError?: Error) => {\n\t\t\t\tif (maybeError) {\n\t\t\t\t\t// TODO: Not sure how we want to deal with that\n\t\t\t\t\tconsole.warn(`An error occurred during Segment identify`, maybeError);\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,SAAS,2BACR,eAAwC;AAExC,MAAI,iBAAiB,QAAW;AACzB,UAAA,IAAI,MACT,kIAAkI;AAAA,EAEnI;AACF;AAEM,MAAO,yBAAyB,YAAW;AAAA,EAA3C;AAAA;AACG,oCAAW;AACX;AACA;AACA;AAAA;AAAA,EAER,MAAM,gBAAa;AAClB,QAAI,KAAK,gBAAgB;AAExB;AAAA,IACA;AAEG,QAAA;AACA,QAAA;AACI,aAAA,MAAM,KAAK,QAAQ;YACzB;AACM,aAAA,MAAM,KAAK,QAAQ;IAC1B;AAED,SAAK,WAAW,cAAc,IAAI,EAAE,cAAc;AAClD,SAAK,iBAAiB,IAAI,cAAc,WAAW,YAAY;AAAA;AAAA,MAE9D,SAAS;AAAA;AAAA,MAET,QAAQ,KAAK;AAAA,IAAA,
|
|
1
|
+
{"version":3,"file":"TelemetryManager.js","sources":["../../../../src/managers/telemetry/TelemetryManager.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\n\nimport SegmentClient from \"analytics-node\";\n\nimport { readPrismicrc } from \"../../lib/prismicrc\";\n\nimport { API_TOKENS } from \"../../constants/API_TOKENS\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport {\n\tHumanSegmentEventType,\n\tHumanSegmentEventTypes,\n\tSegmentEvents,\n} from \"./types\";\n\ntype TelemetryManagerTrackArgs = SegmentEvents;\n\ntype TelemetryManagerIdentifyArgs = {\n\tuserID: string;\n\tintercomHash: string;\n};\n\nfunction assertTelemetryInitialized(\n\tsegmentClient: SegmentClient | undefined,\n): asserts segmentClient is NonNullable<typeof segmentClient> {\n\tif (segmentClient == undefined) {\n\t\tthrow new Error(\n\t\t\t\"Telemetry has not been initialized. Run `SliceMachineManager.telemetry.prototype.initTelemetry()` before re-calling this method.\",\n\t\t);\n\t}\n}\n\nexport class TelemetryManager extends BaseManager {\n\tprivate _enabled = false;\n\tprivate _segmentClient: SegmentClient | undefined = undefined;\n\tprivate _anonymousID: string | undefined = undefined;\n\tprivate _userID: string | undefined = undefined;\n\n\tasync initTelemetry(): Promise<void> {\n\t\tif (this._segmentClient) {\n\t\t\t// Prevent subsequent initializations.\n\t\t\treturn;\n\t\t}\n\n\t\tlet root: string;\n\t\ttry {\n\t\t\troot = await this.project.getRoot();\n\t\t} catch {\n\t\t\troot = await this.project.suggestRoot();\n\t\t}\n\n\t\tthis._enabled = readPrismicrc(root).telemetry !== false;\n\t\tthis._segmentClient = new SegmentClient(API_TOKENS.SegmentKey, {\n\t\t\t// Since it's a local app, we do not benefit from event batching the way a server would normally do, all tracking event will be awaited.\n\t\t\tflushAt: 1,\n\t\t\t// TODO: Verify that this actually does not send data to Segment when false.\n\t\t\tenable: this._enabled,\n\t\t\terrorHandler: () => {\n\t\t\t\t// noop - We don't care if the tracking event\n\t\t\t\t// failed. Some users or networks intentionally\n\t\t\t\t// block Segment, so we can't block the app if\n\t\t\t\t// a tracking event is unsuccessful.\n\t\t\t},\n\t\t});\n\t\tthis._anonymousID = randomUUID();\n\t}\n\n\t// TODO: Should `userId` be automatically populated by the logged in\n\t// user? We already have their info via UserRepository.\n\ttrack(args: TelemetryManagerTrackArgs): Promise<void> {\n\t\tconst { event, repository, ...properties } = args;\n\n\t\tconst payload: {\n\t\t\tevent: HumanSegmentEventTypes;\n\t\t\tuserId?: string;\n\t\t\tanonymousId?: string;\n\t\t\tproperties?: Record<string, unknown>;\n\t\t\tcontext?: {\n\t\t\t\tgroupId?: {\n\t\t\t\t\tRepository?: string;\n\t\t\t\t};\n\t\t\t};\n\t\t} = {\n\t\t\tevent: HumanSegmentEventType[event],\n\t\t\tproperties: {\n\t\t\t\trepo: repository,\n\t\t\t\t...properties,\n\t\t\t},\n\t\t};\n\n\t\tif (this._userID) {\n\t\t\tpayload.userId = this._userID;\n\t\t} else {\n\t\t\tpayload.anonymousId = this._anonymousID;\n\t\t}\n\n\t\tif (args.repository) {\n\t\t\tpayload.context ||= {};\n\t\t\tpayload.context.groupId ||= {};\n\t\t\tpayload.context.groupId.Repository = repository;\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tassertTelemetryInitialized(this._segmentClient);\n\n\t\t\t// TODO: Make sure client fails gracefully when no internet connection\n\t\t\tthis._segmentClient.track(payload, (maybeError?: Error) => {\n\t\t\t\tif (maybeError) {\n\t\t\t\t\t// TODO: Not sure how we want to deal with that\n\t\t\t\t\tconsole.warn(`An error occurred during Segment tracking`, maybeError);\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n\n\t// TODO: Should `userID` and `intercomHash` be automatically populated\n\t// by the logged in user? We already have their info via\n\t// UserRepository.\n\tidentify(args: TelemetryManagerIdentifyArgs): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tassertTelemetryInitialized(this._segmentClient);\n\n\t\t\tconst payload = {\n\t\t\t\tuserId: args.userID,\n\t\t\t\tanonymousId: this._anonymousID,\n\t\t\t\tintegrations: {\n\t\t\t\t\tIntercom: {\n\t\t\t\t\t\tuser_hash: args.intercomHash,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tthis._userID = args.userID;\n\n\t\t\t// TODO: Make sure client fails gracefully when no internet connection\n\t\t\tthis._segmentClient.identify(payload, (maybeError?: Error) => {\n\t\t\t\tif (maybeError) {\n\t\t\t\t\t// TODO: Not sure how we want to deal with that\n\t\t\t\t\tconsole.warn(`An error occurred during Segment identify`, maybeError);\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAuBA,SAAS,2BACR,eAAwC;AAExC,MAAI,iBAAiB,QAAW;AACzB,UAAA,IAAI,MACT,kIAAkI;AAAA,EAEnI;AACF;AAEM,MAAO,yBAAyB,YAAW;AAAA,EAA3C;AAAA;AACG,oCAAW;AACX;AACA;AACA;AAAA;AAAA,EAER,MAAM,gBAAa;AAClB,QAAI,KAAK,gBAAgB;AAExB;AAAA,IACA;AAEG,QAAA;AACA,QAAA;AACI,aAAA,MAAM,KAAK,QAAQ;YACzB;AACM,aAAA,MAAM,KAAK,QAAQ;IAC1B;AAED,SAAK,WAAW,cAAc,IAAI,EAAE,cAAc;AAClD,SAAK,iBAAiB,IAAI,cAAc,WAAW,YAAY;AAAA;AAAA,MAE9D,SAAS;AAAA;AAAA,MAET,QAAQ,KAAK;AAAA,MACb,cAAc,MAAK;AAAA,MAKnB;AAAA,IAAA,CACA;AACD,SAAK,eAAe;EACrB;AAAA;AAAA;AAAA,EAIA,MAAM,MAA+B;;AACpC,UAAM,EAAE,OAAO,YAAY,GAAG,eAAe;AAE7C,UAAM,UAUF;AAAA,MACH,OAAO,sBAAsB,KAAK;AAAA,MAClC,YAAY;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,MACH;AAAA,IAAA;AAGF,QAAI,KAAK,SAAS;AACjB,cAAQ,SAAS,KAAK;AAAA,IAAA,OAChB;AACN,cAAQ,cAAc,KAAK;AAAA,IAC3B;AAED,QAAI,KAAK,YAAY;AACpB,cAAQ,YAAR,QAAQ,UAAY;AACZ,oBAAA,SAAQ,YAAR,GAAQ,UAAY;AACpB,cAAA,QAAQ,QAAQ,aAAa;AAAA,IACrC;AAEM,WAAA,IAAI,QAAQ,CAAC,YAAW;AAC9B,iCAA2B,KAAK,cAAc;AAG9C,WAAK,eAAe,MAAM,SAAS,CAAC,eAAsB;AACzD,YAAI,YAAY;AAEP,kBAAA,KAAK,6CAA6C,UAAU;AAAA,QACpE;;OAGD;AAAA,IAAA,CACD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,MAAkC;AACnC,WAAA,IAAI,QAAQ,CAAC,YAAW;AAC9B,iCAA2B,KAAK,cAAc;AAE9C,YAAM,UAAU;AAAA,QACf,QAAQ,KAAK;AAAA,QACb,aAAa,KAAK;AAAA,QAClB,cAAc;AAAA,UACb,UAAU;AAAA,YACT,WAAW,KAAK;AAAA,UAChB;AAAA,QACD;AAAA,MAAA;AAEF,WAAK,UAAU,KAAK;AAGpB,WAAK,eAAe,SAAS,SAAS,CAAC,eAAsB;AAC5D,YAAI,YAAY;AAEP,kBAAA,KAAK,6CAA6C,UAAU;AAAA,QACpE;;OAGD;AAAA,IAAA,CACD;AAAA,EACF;AACA;"}
|
|
@@ -6,10 +6,11 @@ var __publicField = (obj, key, value) => {
|
|
|
6
6
|
return value;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
9
|
+
const errors = require("../../errors.cjs");
|
|
9
10
|
const BaseManager = require("../BaseManager.cjs");
|
|
10
11
|
class UserManager extends BaseManager.BaseManager {
|
|
11
|
-
constructor() {
|
|
12
|
-
super(
|
|
12
|
+
constructor(sliceMachineManager) {
|
|
13
|
+
super(sliceMachineManager);
|
|
13
14
|
__publicField(this, "login", this.prismicAuthManager.login.bind(this.prismicAuthManager));
|
|
14
15
|
__publicField(this, "getLoginSessionInfo", this.prismicAuthManager.getLoginSessionInfo.bind(this.prismicAuthManager));
|
|
15
16
|
__publicField(this, "nodeLoginSession", this.prismicAuthManager.nodeLoginSession.bind(this.prismicAuthManager));
|
|
@@ -19,6 +20,9 @@ class UserManager extends BaseManager.BaseManager {
|
|
|
19
20
|
__publicField(this, "getAuthenticationToken", this.prismicAuthManager.getAuthenticationToken.bind(this.prismicAuthManager));
|
|
20
21
|
__publicField(this, "getAuthenticationCookies", this.prismicAuthManager.getAuthenticationCookies.bind(this.prismicAuthManager));
|
|
21
22
|
__publicField(this, "getProfile", this.prismicAuthManager.getProfile.bind(this.prismicAuthManager));
|
|
23
|
+
if (!sliceMachineManager.getPrismicAuthManager()) {
|
|
24
|
+
throw new errors.SliceMachineError("SliceMachineManager._prismicAuthManager must be set with a PrismicAuthManager instance before instantiating UserManager.");
|
|
25
|
+
}
|
|
22
26
|
}
|
|
23
27
|
}
|
|
24
28
|
exports.UserManager = UserManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserManager.cjs","sources":["../../../../src/managers/user/UserManager.ts"],"sourcesContent":["import { BaseManager } from \"../BaseManager\";\n\nexport class UserManager extends BaseManager {\n\tlogin = this.prismicAuthManager.login.bind(this.prismicAuthManager);\n\tgetLoginSessionInfo = this.prismicAuthManager.getLoginSessionInfo.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tnodeLoginSession = this.prismicAuthManager.nodeLoginSession.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tlogout = this.prismicAuthManager.logout.bind(this.prismicAuthManager);\n\tcheckIsLoggedIn = this.prismicAuthManager.checkIsLoggedIn.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\trefreshAuthenticationToken =\n\t\tthis.prismicAuthManager.refreshAuthenticationToken.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetAuthenticationToken = this.prismicAuthManager.getAuthenticationToken.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tgetAuthenticationCookies =\n\t\tthis.prismicAuthManager.getAuthenticationCookies.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetProfile = this.prismicAuthManager.getProfile.bind(this.prismicAuthManager);\n}\n"],"names":["BaseManager"],"mappings":"
|
|
1
|
+
{"version":3,"file":"UserManager.cjs","sources":["../../../../src/managers/user/UserManager.ts"],"sourcesContent":["import { SliceMachineError } from \"../../errors\";\nimport { BaseManager } from \"../BaseManager\";\nimport { SliceMachineManager } from \"../SliceMachineManager\";\n\nexport class UserManager extends BaseManager {\n\tconstructor(sliceMachineManager: SliceMachineManager) {\n\t\tsuper(sliceMachineManager);\n\n\t\tif (!sliceMachineManager.getPrismicAuthManager()) {\n\t\t\tthrow new SliceMachineError(\n\t\t\t\t\"SliceMachineManager._prismicAuthManager must be set with a PrismicAuthManager instance before instantiating UserManager.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tlogin = this.prismicAuthManager.login.bind(this.prismicAuthManager);\n\tgetLoginSessionInfo = this.prismicAuthManager.getLoginSessionInfo.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tnodeLoginSession = this.prismicAuthManager.nodeLoginSession.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tlogout = this.prismicAuthManager.logout.bind(this.prismicAuthManager);\n\tcheckIsLoggedIn = this.prismicAuthManager.checkIsLoggedIn.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\trefreshAuthenticationToken =\n\t\tthis.prismicAuthManager.refreshAuthenticationToken.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetAuthenticationToken = this.prismicAuthManager.getAuthenticationToken.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tgetAuthenticationCookies =\n\t\tthis.prismicAuthManager.getAuthenticationCookies.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetProfile = this.prismicAuthManager.getProfile.bind(this.prismicAuthManager);\n}\n"],"names":["BaseManager","SliceMachineError"],"mappings":";;;;;;;;;;AAIM,MAAO,oBAAoBA,YAAAA,YAAW;AAAA,EAC3C,YAAY,qBAAwC;AACnD,UAAM,mBAAmB;AAS1B,iCAAQ,KAAK,mBAAmB,MAAM,KAAK,KAAK,kBAAkB;AAClE,+CAAsB,KAAK,mBAAmB,oBAAoB,KACjE,KAAK,kBAAkB;AAExB,4CAAmB,KAAK,mBAAmB,iBAAiB,KAC3D,KAAK,kBAAkB;AAExB,kCAAS,KAAK,mBAAmB,OAAO,KAAK,KAAK,kBAAkB;AACpE,2CAAkB,KAAK,mBAAmB,gBAAgB,KACzD,KAAK,kBAAkB;AAExB,sDACC,KAAK,mBAAmB,2BAA2B,KAClD,KAAK,kBAAkB;AAEzB,kDAAyB,KAAK,mBAAmB,uBAAuB,KACvE,KAAK,kBAAkB;AAExB,oDACC,KAAK,mBAAmB,yBAAyB,KAChD,KAAK,kBAAkB;AAEzB,sCAAa,KAAK,mBAAmB,WAAW,KAAK,KAAK,kBAAkB;AA7BvE,QAAA,CAAC,oBAAoB,yBAAyB;AAC3C,YAAA,IAAIC,OAAAA,kBACT,0HAA0H;AAAA,IAE3H;AAAA,EACF;AAyBA;;"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { BaseManager } from "../BaseManager";
|
|
2
|
+
import { SliceMachineManager } from "../SliceMachineManager";
|
|
2
3
|
export declare class UserManager extends BaseManager {
|
|
4
|
+
constructor(sliceMachineManager: SliceMachineManager);
|
|
3
5
|
login: (args: {
|
|
4
6
|
email: string;
|
|
5
7
|
cookies: string[];
|
|
@@ -4,10 +4,11 @@ var __publicField = (obj, key, value) => {
|
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
return value;
|
|
6
6
|
};
|
|
7
|
+
import { SliceMachineError } from "../../errors.js";
|
|
7
8
|
import { BaseManager } from "../BaseManager.js";
|
|
8
9
|
class UserManager extends BaseManager {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(
|
|
10
|
+
constructor(sliceMachineManager) {
|
|
11
|
+
super(sliceMachineManager);
|
|
11
12
|
__publicField(this, "login", this.prismicAuthManager.login.bind(this.prismicAuthManager));
|
|
12
13
|
__publicField(this, "getLoginSessionInfo", this.prismicAuthManager.getLoginSessionInfo.bind(this.prismicAuthManager));
|
|
13
14
|
__publicField(this, "nodeLoginSession", this.prismicAuthManager.nodeLoginSession.bind(this.prismicAuthManager));
|
|
@@ -17,6 +18,9 @@ class UserManager extends BaseManager {
|
|
|
17
18
|
__publicField(this, "getAuthenticationToken", this.prismicAuthManager.getAuthenticationToken.bind(this.prismicAuthManager));
|
|
18
19
|
__publicField(this, "getAuthenticationCookies", this.prismicAuthManager.getAuthenticationCookies.bind(this.prismicAuthManager));
|
|
19
20
|
__publicField(this, "getProfile", this.prismicAuthManager.getProfile.bind(this.prismicAuthManager));
|
|
21
|
+
if (!sliceMachineManager.getPrismicAuthManager()) {
|
|
22
|
+
throw new SliceMachineError("SliceMachineManager._prismicAuthManager must be set with a PrismicAuthManager instance before instantiating UserManager.");
|
|
23
|
+
}
|
|
20
24
|
}
|
|
21
25
|
}
|
|
22
26
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserManager.js","sources":["../../../../src/managers/user/UserManager.ts"],"sourcesContent":["import { BaseManager } from \"../BaseManager\";\n\nexport class UserManager extends BaseManager {\n\tlogin = this.prismicAuthManager.login.bind(this.prismicAuthManager);\n\tgetLoginSessionInfo = this.prismicAuthManager.getLoginSessionInfo.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tnodeLoginSession = this.prismicAuthManager.nodeLoginSession.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tlogout = this.prismicAuthManager.logout.bind(this.prismicAuthManager);\n\tcheckIsLoggedIn = this.prismicAuthManager.checkIsLoggedIn.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\trefreshAuthenticationToken =\n\t\tthis.prismicAuthManager.refreshAuthenticationToken.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetAuthenticationToken = this.prismicAuthManager.getAuthenticationToken.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tgetAuthenticationCookies =\n\t\tthis.prismicAuthManager.getAuthenticationCookies.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetProfile = this.prismicAuthManager.getProfile.bind(this.prismicAuthManager);\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UserManager.js","sources":["../../../../src/managers/user/UserManager.ts"],"sourcesContent":["import { SliceMachineError } from \"../../errors\";\nimport { BaseManager } from \"../BaseManager\";\nimport { SliceMachineManager } from \"../SliceMachineManager\";\n\nexport class UserManager extends BaseManager {\n\tconstructor(sliceMachineManager: SliceMachineManager) {\n\t\tsuper(sliceMachineManager);\n\n\t\tif (!sliceMachineManager.getPrismicAuthManager()) {\n\t\t\tthrow new SliceMachineError(\n\t\t\t\t\"SliceMachineManager._prismicAuthManager must be set with a PrismicAuthManager instance before instantiating UserManager.\",\n\t\t\t);\n\t\t}\n\t}\n\n\tlogin = this.prismicAuthManager.login.bind(this.prismicAuthManager);\n\tgetLoginSessionInfo = this.prismicAuthManager.getLoginSessionInfo.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tnodeLoginSession = this.prismicAuthManager.nodeLoginSession.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tlogout = this.prismicAuthManager.logout.bind(this.prismicAuthManager);\n\tcheckIsLoggedIn = this.prismicAuthManager.checkIsLoggedIn.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\trefreshAuthenticationToken =\n\t\tthis.prismicAuthManager.refreshAuthenticationToken.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetAuthenticationToken = this.prismicAuthManager.getAuthenticationToken.bind(\n\t\tthis.prismicAuthManager,\n\t);\n\tgetAuthenticationCookies =\n\t\tthis.prismicAuthManager.getAuthenticationCookies.bind(\n\t\t\tthis.prismicAuthManager,\n\t\t);\n\tgetProfile = this.prismicAuthManager.getProfile.bind(this.prismicAuthManager);\n}\n"],"names":[],"mappings":";;;;;;;;AAIM,MAAO,oBAAoB,YAAW;AAAA,EAC3C,YAAY,qBAAwC;AACnD,UAAM,mBAAmB;AAS1B,iCAAQ,KAAK,mBAAmB,MAAM,KAAK,KAAK,kBAAkB;AAClE,+CAAsB,KAAK,mBAAmB,oBAAoB,KACjE,KAAK,kBAAkB;AAExB,4CAAmB,KAAK,mBAAmB,iBAAiB,KAC3D,KAAK,kBAAkB;AAExB,kCAAS,KAAK,mBAAmB,OAAO,KAAK,KAAK,kBAAkB;AACpE,2CAAkB,KAAK,mBAAmB,gBAAgB,KACzD,KAAK,kBAAkB;AAExB,sDACC,KAAK,mBAAmB,2BAA2B,KAClD,KAAK,kBAAkB;AAEzB,kDAAyB,KAAK,mBAAmB,uBAAuB,KACvE,KAAK,kBAAkB;AAExB,oDACC,KAAK,mBAAmB,yBAAyB,KAChD,KAAK,kBAAkB;AAEzB,sCAAa,KAAK,mBAAmB,WAAW,KAAK,KAAK,kBAAkB;AA7BvE,QAAA,CAAC,oBAAoB,yBAAyB;AAC3C,YAAA,IAAI,kBACT,0HAA0H;AAAA,IAE3H;AAAA,EACF;AAyBA;"}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
9
9
|
const fs = require("node:fs/promises");
|
|
10
10
|
const path = require("node:path");
|
|
11
11
|
const semver = require("semver");
|
|
12
|
+
const decodePackageJSON = require("../../lib/decodePackageJSON.cjs");
|
|
12
13
|
const fetchGitHubReleaseBodyForRelease = require("../../lib/fetchGitHubReleaseBodyForRelease.cjs");
|
|
13
14
|
const fetchNPMPackageVersions = require("../../lib/fetchNPMPackageVersions.cjs");
|
|
14
15
|
const SLICE_MACHINE_GITHUB_PACKAGE_NAME = require("../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME.cjs");
|
|
@@ -39,7 +40,9 @@ const detectVersionBumpKind = (to, from) => {
|
|
|
39
40
|
if (!from) {
|
|
40
41
|
return VERSION_KIND.VERSION_KIND.FIRST;
|
|
41
42
|
}
|
|
42
|
-
if (semver.
|
|
43
|
+
if (semver.eq(to, from)) {
|
|
44
|
+
return void 0;
|
|
45
|
+
} else if (semver.satisfies(to, `~${from}`)) {
|
|
43
46
|
return VERSION_KIND.VERSION_KIND.PATCH;
|
|
44
47
|
} else if (semver.satisfies(to, `^${from}`)) {
|
|
45
48
|
return VERSION_KIND.VERSION_KIND.MINOR;
|
|
@@ -58,8 +61,16 @@ class VersionsManager extends BaseManager.BaseManager {
|
|
|
58
61
|
async getRunningSliceMachineVersion() {
|
|
59
62
|
const sliceMachineDir = await this.project.locateSliceMachineUIDir();
|
|
60
63
|
const sliceMachinePackageJSONContents = await fs__namespace.readFile(path__namespace.join(sliceMachineDir, "package.json"), "utf8");
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
let sliceMachinePackageJSON;
|
|
65
|
+
try {
|
|
66
|
+
sliceMachinePackageJSON = JSON.parse(sliceMachinePackageJSONContents);
|
|
67
|
+
} catch {
|
|
68
|
+
}
|
|
69
|
+
const { value, error } = decodePackageJSON.decodePackageJSON(sliceMachinePackageJSON);
|
|
70
|
+
if (error) {
|
|
71
|
+
throw new Error(`Invalid ${SLICE_MACHINE_NPM_PACKAGE_NAME.SLICE_MACHINE_NPM_PACKAGE_NAME} \`package.json\` file. ${error.errors.join(", ")}`);
|
|
72
|
+
}
|
|
73
|
+
return value.version;
|
|
63
74
|
}
|
|
64
75
|
async getAllStableSliceMachineVersions() {
|
|
65
76
|
const versions = await fetchNPMPackageVersions.fetchNPMPackageVersions({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionsManager.cjs","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): typeof VERSION_KIND[keyof typeof VERSION_KIND] => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\n\t\tconst sliceMachinePackageJSONContents = await fs.readFile(\n\t\t\tpath.join(sliceMachineDir, \"package.json\"),\n\t\t\t\"utf8\",\n\t\t);\n\n\t\t//
|
|
1
|
+
{"version":3,"file":"VersionsManager.cjs","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): typeof VERSION_KIND[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\n\t\tconst sliceMachinePackageJSONContents = await fs.readFile(\n\t\t\tpath.join(sliceMachineDir, \"package.json\"),\n\t\t\t\"utf8\",\n\t\t);\n\n\t\tlet sliceMachinePackageJSON: unknown;\n\t\ttry {\n\t\t\tsliceMachinePackageJSON = JSON.parse(sliceMachinePackageJSONContents);\n\t\t} catch {\n\t\t\t// noop\n\t\t}\n\n\t\tconst { value, error } = decodePackageJSON(sliceMachinePackageJSON);\n\n\t\tif (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid ${SLICE_MACHINE_NPM_PACKAGE_NAME} \\`package.json\\` file. ${error.errors.join(\n\t\t\t\t\t\", \",\n\t\t\t\t)}`,\n\t\t\t);\n\t\t}\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\n\t\tconst filteredVersions = versions.filter((version) => {\n\t\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\t\treturn (\n\t\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t\t);\n\t\t});\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":["VERSION_KIND","BaseManager","fs","path","decodePackageJSON","SLICE_MACHINE_NPM_PACKAGE_NAME","fetchNPMPackageVersions","fetchGitHubReleaseBodyForRelease","SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION","SLICE_MACHINE_GITHUB_REPOSITORY_NAME","SLICE_MACHINE_GITHUB_PACKAGE_NAME"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,wBAAwB,CAC7B,IACA,SAC+D;AAC/D,MAAI,CAAC,MAAM;AACV,WAAOA,aAAAA,aAAa;AAAA,EACpB;AAED,MAAI,OAAO,GAAG,IAAI,IAAI,GAAG;AACjB,WAAA;AAAA,EAAA,WACG,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAC5C,WAAOA,aAAAA,aAAa;AAAA,EAAA,WACV,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAC5C,WAAOA,aAAAA,aAAa;AAAA,EAAA,OACd;AACN,WAAOA,aAAAA,aAAa;AAAA,EACpB;AACF;AAMM,MAAO,wBAAwBC,YAAAA,YAAW;AAAA,EAA1C;AAAA;AAIL;AAAA;AAAA;AAAA,kEAGI,CAAA;AAAA;AAAA,EAEJ,MAAM,gCAA6B;AAClC,UAAM,kBAAkB,MAAM,KAAK,QAAQ,wBAAuB;AAE5D,UAAA,kCAAkC,MAAMC,cAAG,SAChDC,gBAAK,KAAK,iBAAiB,cAAc,GACzC,MAAM;AAGH,QAAA;AACA,QAAA;AACuB,gCAAA,KAAK,MAAM,+BAA+B;AAAA,IAAA,QACnE;AAAA,IAED;AAED,UAAM,EAAE,OAAO,MAAK,IAAKC,oCAAkB,uBAAuB;AAElE,QAAI,OAAO;AACJ,YAAA,IAAI,MACT,WAAWC,+BAAA,yDAAyD,MAAM,OAAO,KAChF,IAAI,GACF;AAAA,IAEJ;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,mCAAgC;AAC/B,UAAA,WAAW,MAAMC,gDAAwB;AAAA,MAC9C,aAAaD,+BAAA;AAAA,IAAA,CACb;AAED,UAAM,mBAAmB,SAAS,OAAO,CAAC,YAAW;AAGpD,aACC,uBAAuB,KAAK,OAAO,KACnC,uBAAuB,KAAK,OAAO;AAAA,IAAA,CAEpC;AAEM,WAAA,OAAO,MAAM,gBAAgB;AAAA,EACrC;AAAA,EAEA,MAAM,2CAAwC;AACvC,UAAA,WAAW,MAAM,KAAK;AAE5B,WAAO,SAAS,IAAI,CAAC,SAAS,MAAK;AAC5B,YAAA,kBAAkB,SAAS,IAAI,CAAC;AAE/B,aAAA;AAAA,QACN;AAAA,QACA,MAAM,sBAAsB,SAAS,eAAe;AAAA,MAAA;AAAA,KAErD;AAAA,EACF;AAAA,EAEA,MAAM,0CAAuC;AACtC,UAAA,WAAW,MAAM,KAAK;AACtB,UAAA,iBAAiB,MAAM,KAAK;AAElC,WAAO,OAAO,cAAc,UAAU,IAAI,gBAAgB,KAAK;AAAA,EAChE;AAAA,EAEA,MAAM,yBAAsB;AACrB,UAAA,WAAW,MAAM,KAAK;AACtB,UAAA,iBAAiB,MAAM,KAAK;AAElC,WAAO,OAAO,GAAG,SAAS,CAAC,GAAG,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,sCACL,MAAsD;AAEtD,WAAO,MAAME,iCAAAA,iCAAiC;AAAA,MAC7C,iBAAiBC,6CAAA;AAAA,MACjB,gBAAgBC,qCAAA;AAAA,MAChB,aAAaC,kCAAA;AAAA,MACb,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,IAAA,CACZ;AAAA,EACF;AACA;;"}
|
|
@@ -7,6 +7,7 @@ var __publicField = (obj, key, value) => {
|
|
|
7
7
|
import * as fs from "node:fs/promises";
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import semver from "semver";
|
|
10
|
+
import { decodePackageJSON } from "../../lib/decodePackageJSON.js";
|
|
10
11
|
import { fetchGitHubReleaseBodyForRelease } from "../../lib/fetchGitHubReleaseBodyForRelease.js";
|
|
11
12
|
import { fetchNPMPackageVersions } from "../../lib/fetchNPMPackageVersions.js";
|
|
12
13
|
import { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from "../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME.js";
|
|
@@ -19,7 +20,9 @@ const detectVersionBumpKind = (to, from) => {
|
|
|
19
20
|
if (!from) {
|
|
20
21
|
return VERSION_KIND.FIRST;
|
|
21
22
|
}
|
|
22
|
-
if (semver.
|
|
23
|
+
if (semver.eq(to, from)) {
|
|
24
|
+
return void 0;
|
|
25
|
+
} else if (semver.satisfies(to, `~${from}`)) {
|
|
23
26
|
return VERSION_KIND.PATCH;
|
|
24
27
|
} else if (semver.satisfies(to, `^${from}`)) {
|
|
25
28
|
return VERSION_KIND.MINOR;
|
|
@@ -38,8 +41,16 @@ class VersionsManager extends BaseManager {
|
|
|
38
41
|
async getRunningSliceMachineVersion() {
|
|
39
42
|
const sliceMachineDir = await this.project.locateSliceMachineUIDir();
|
|
40
43
|
const sliceMachinePackageJSONContents = await fs.readFile(path.join(sliceMachineDir, "package.json"), "utf8");
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
let sliceMachinePackageJSON;
|
|
45
|
+
try {
|
|
46
|
+
sliceMachinePackageJSON = JSON.parse(sliceMachinePackageJSONContents);
|
|
47
|
+
} catch {
|
|
48
|
+
}
|
|
49
|
+
const { value, error } = decodePackageJSON(sliceMachinePackageJSON);
|
|
50
|
+
if (error) {
|
|
51
|
+
throw new Error(`Invalid ${SLICE_MACHINE_NPM_PACKAGE_NAME} \`package.json\` file. ${error.errors.join(", ")}`);
|
|
52
|
+
}
|
|
53
|
+
return value.version;
|
|
43
54
|
}
|
|
44
55
|
async getAllStableSliceMachineVersions() {
|
|
45
56
|
const versions = await fetchNPMPackageVersions({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionsManager.js","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): typeof VERSION_KIND[keyof typeof VERSION_KIND] => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\n\t\tconst sliceMachinePackageJSONContents = await fs.readFile(\n\t\t\tpath.join(sliceMachineDir, \"package.json\"),\n\t\t\t\"utf8\",\n\t\t);\n\n\t\t//
|
|
1
|
+
{"version":3,"file":"VersionsManager.js","sources":["../../../../src/managers/versions/VersionsManager.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport semver from \"semver\";\n\nimport { decodePackageJSON } from \"../../lib/decodePackageJSON\";\nimport {\n\tfetchGitHubReleaseBodyForRelease,\n\tGitHubReleaseMetadata,\n} from \"../../lib/fetchGitHubReleaseBodyForRelease\";\nimport { fetchNPMPackageVersions } from \"../../lib/fetchNPMPackageVersions\";\n\nimport { SLICE_MACHINE_GITHUB_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_PACKAGE_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_NAME } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_NAME\";\nimport { SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION } from \"../../constants/SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION\";\nimport { SLICE_MACHINE_NPM_PACKAGE_NAME } from \"../../constants/SLICE_MACHINE_NPM_PACKAGE_NAME\";\nimport { VERSION_KIND } from \"../../constants/VERSION_KIND\";\n\nimport { BaseManager } from \"../BaseManager\";\n\nimport { Version } from \"./types\";\n\nconst detectVersionBumpKind = (\n\tto: string,\n\tfrom?: string,\n): typeof VERSION_KIND[keyof typeof VERSION_KIND] | undefined => {\n\tif (!from) {\n\t\treturn VERSION_KIND.FIRST;\n\t}\n\n\tif (semver.eq(to, from)) {\n\t\treturn undefined;\n\t} else if (semver.satisfies(to, `~${from}`)) {\n\t\treturn VERSION_KIND.PATCH;\n\t} else if (semver.satisfies(to, `^${from}`)) {\n\t\treturn VERSION_KIND.MINOR;\n\t} else {\n\t\treturn VERSION_KIND.MAJOR;\n\t}\n};\n\ntype SliceMachineManagerGetReleaseNotesForVersionArgs = {\n\tversion: string;\n};\n\nexport class VersionsManager extends BaseManager {\n\t/**\n\t * Record of version numbers mapped to their GitHub release metadata.\n\t */\n\tgitHubSliceMachineReleaseMetadataCache: Record<\n\t\tstring,\n\t\tGitHubReleaseMetadata | undefined\n\t> = {};\n\n\tasync getRunningSliceMachineVersion(): Promise<string> {\n\t\tconst sliceMachineDir = await this.project.locateSliceMachineUIDir();\n\n\t\tconst sliceMachinePackageJSONContents = await fs.readFile(\n\t\t\tpath.join(sliceMachineDir, \"package.json\"),\n\t\t\t\"utf8\",\n\t\t);\n\n\t\tlet sliceMachinePackageJSON: unknown;\n\t\ttry {\n\t\t\tsliceMachinePackageJSON = JSON.parse(sliceMachinePackageJSONContents);\n\t\t} catch {\n\t\t\t// noop\n\t\t}\n\n\t\tconst { value, error } = decodePackageJSON(sliceMachinePackageJSON);\n\n\t\tif (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid ${SLICE_MACHINE_NPM_PACKAGE_NAME} \\`package.json\\` file. ${error.errors.join(\n\t\t\t\t\t\", \",\n\t\t\t\t)}`,\n\t\t\t);\n\t\t}\n\n\t\treturn value.version;\n\t}\n\n\tasync getAllStableSliceMachineVersions(): Promise<string[]> {\n\t\tconst versions = await fetchNPMPackageVersions({\n\t\t\tpackageName: SLICE_MACHINE_NPM_PACKAGE_NAME,\n\t\t});\n\n\t\tconst filteredVersions = versions.filter((version) => {\n\t\t\t// Exclude tagged versions (e.g. `1.0.0-alpha.0`).\n\t\t\t// Exclude versions < 0.1.0 (e.g. `0.0.1`).\n\t\t\treturn (\n\t\t\t\t/^[1-9]\\d*\\.\\d+\\.\\d+$/.test(version) ||\n\t\t\t\t/^\\d+\\.[1-9]\\d*\\.\\d+$/.test(version)\n\t\t\t);\n\t\t});\n\n\t\treturn semver.rsort(filteredVersions);\n\t}\n\n\tasync getAllStableSliceMachineVersionsWithKind(): Promise<Version[]> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\n\t\treturn versions.map((version, i) => {\n\t\t\tconst previousVersion = versions[i + 1];\n\n\t\t\treturn {\n\t\t\t\tversion,\n\t\t\t\tkind: detectVersionBumpKind(version, previousVersion),\n\t\t\t};\n\t\t});\n\t}\n\n\tasync getLatestNonBreakingSliceMachineVersion(): Promise<string | undefined> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.maxSatisfying(versions, `^${currentVersion}`) ?? undefined;\n\t}\n\n\tasync checkIsUpdateAvailable(): Promise<boolean> {\n\t\tconst versions = await this.getAllStableSliceMachineVersions();\n\t\tconst currentVersion = await this.getRunningSliceMachineVersion();\n\n\t\treturn semver.gt(versions[0], currentVersion);\n\t}\n\n\tasync getSliceMachineReleaseNotesForVersion(\n\t\targs: SliceMachineManagerGetReleaseNotesForVersionArgs,\n\t): Promise<string | undefined> {\n\t\treturn await fetchGitHubReleaseBodyForRelease({\n\t\t\trepositoryOwner: SLICE_MACHINE_GITHUB_REPOSITORY_ORGANIZATION,\n\t\t\trepositoryName: SLICE_MACHINE_GITHUB_REPOSITORY_NAME,\n\t\t\tpackageName: SLICE_MACHINE_GITHUB_PACKAGE_NAME,\n\t\t\tversion: args.version,\n\t\t\tcache: this.gitHubSliceMachineReleaseMetadataCache,\n\t\t});\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,MAAM,wBAAwB,CAC7B,IACA,SAC+D;AAC/D,MAAI,CAAC,MAAM;AACV,WAAO,aAAa;AAAA,EACpB;AAED,MAAI,OAAO,GAAG,IAAI,IAAI,GAAG;AACjB,WAAA;AAAA,EAAA,WACG,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAC5C,WAAO,aAAa;AAAA,EAAA,WACV,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAC5C,WAAO,aAAa;AAAA,EAAA,OACd;AACN,WAAO,aAAa;AAAA,EACpB;AACF;AAMM,MAAO,wBAAwB,YAAW;AAAA,EAA1C;AAAA;AAIL;AAAA;AAAA;AAAA,kEAGI,CAAA;AAAA;AAAA,EAEJ,MAAM,gCAA6B;AAClC,UAAM,kBAAkB,MAAM,KAAK,QAAQ,wBAAuB;AAE5D,UAAA,kCAAkC,MAAM,GAAG,SAChD,KAAK,KAAK,iBAAiB,cAAc,GACzC,MAAM;AAGH,QAAA;AACA,QAAA;AACuB,gCAAA,KAAK,MAAM,+BAA+B;AAAA,IAAA,QACnE;AAAA,IAED;AAED,UAAM,EAAE,OAAO,MAAK,IAAK,kBAAkB,uBAAuB;AAElE,QAAI,OAAO;AACJ,YAAA,IAAI,MACT,WAAW,yDAAyD,MAAM,OAAO,KAChF,IAAI,GACF;AAAA,IAEJ;AAED,WAAO,MAAM;AAAA,EACd;AAAA,EAEA,MAAM,mCAAgC;AAC/B,UAAA,WAAW,MAAM,wBAAwB;AAAA,MAC9C,aAAa;AAAA,IAAA,CACb;AAED,UAAM,mBAAmB,SAAS,OAAO,CAAC,YAAW;AAGpD,aACC,uBAAuB,KAAK,OAAO,KACnC,uBAAuB,KAAK,OAAO;AAAA,IAAA,CAEpC;AAEM,WAAA,OAAO,MAAM,gBAAgB;AAAA,EACrC;AAAA,EAEA,MAAM,2CAAwC;AACvC,UAAA,WAAW,MAAM,KAAK;AAE5B,WAAO,SAAS,IAAI,CAAC,SAAS,MAAK;AAC5B,YAAA,kBAAkB,SAAS,IAAI,CAAC;AAE/B,aAAA;AAAA,QACN;AAAA,QACA,MAAM,sBAAsB,SAAS,eAAe;AAAA,MAAA;AAAA,KAErD;AAAA,EACF;AAAA,EAEA,MAAM,0CAAuC;AACtC,UAAA,WAAW,MAAM,KAAK;AACtB,UAAA,iBAAiB,MAAM,KAAK;AAElC,WAAO,OAAO,cAAc,UAAU,IAAI,gBAAgB,KAAK;AAAA,EAChE;AAAA,EAEA,MAAM,yBAAsB;AACrB,UAAA,WAAW,MAAM,KAAK;AACtB,UAAA,iBAAiB,MAAM,KAAK;AAElC,WAAO,OAAO,GAAG,SAAS,CAAC,GAAG,cAAc;AAAA,EAC7C;AAAA,EAEA,MAAM,sCACL,MAAsD;AAEtD,WAAO,MAAM,iCAAiC;AAAA,MAC7C,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,SAAS,KAAK;AAAA,MACd,OAAO,KAAK;AAAA,IAAA,CACZ;AAAA,EACF;AACA;"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type PackageChangelog = {
|
|
|
10
10
|
export type PackageVersion = {
|
|
11
11
|
versionNumber: string;
|
|
12
12
|
releaseNote: string | null;
|
|
13
|
-
kind: typeof VERSION_KIND[keyof typeof VERSION_KIND] |
|
|
13
|
+
kind: typeof VERSION_KIND[keyof typeof VERSION_KIND] | undefined;
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
16
|
* A string, object, or instance representing a registered plugin.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slicemachine/manager",
|
|
3
|
-
"version": "0.1.1-dev-plugins.
|
|
3
|
+
"version": "0.1.1-dev-plugins.13",
|
|
4
4
|
"description": "Manage all aspects of a Slice Machine project.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -52,7 +52,8 @@
|
|
|
52
52
|
"lint": "eslint --ext .js,.ts .",
|
|
53
53
|
"prepare": "npm run build",
|
|
54
54
|
"size": "size-limit",
|
|
55
|
-
"test": "npm run lint && npm run unit && npm run build && npm run size",
|
|
55
|
+
"test": "npm run lint && npm run types && npm run unit && npm run build && npm run size",
|
|
56
|
+
"types": "tsc --noEmit",
|
|
56
57
|
"unit": "vitest run --coverage",
|
|
57
58
|
"unit:watch": "vitest watch",
|
|
58
59
|
"depcheck": "depcheck --config=.depcheckrc"
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
"dependencies": {
|
|
61
62
|
"@prismicio/custom-types-client": "^1.0.2",
|
|
62
63
|
"@prismicio/types-internal": "^1.5.3",
|
|
63
|
-
"@slicemachine/plugin-kit": "0.1.8-dev-plugins.
|
|
64
|
+
"@slicemachine/plugin-kit": "0.1.8-dev-plugins.13",
|
|
64
65
|
"@wooorm/starry-night": "^1.4.2",
|
|
65
66
|
"analytics-node": "^6.2.0",
|
|
66
67
|
"cookie": "^0.5.0",
|
|
@@ -87,8 +88,9 @@
|
|
|
87
88
|
"devDependencies": {
|
|
88
89
|
"@prismicio/mock": "^0.2.0",
|
|
89
90
|
"@size-limit/preset-small-lib": "^8.1.0",
|
|
90
|
-
"@types/analytics-node": "^3.1.
|
|
91
|
+
"@types/analytics-node": "^3.1.10",
|
|
91
92
|
"@types/cookie": "^0.5.1",
|
|
93
|
+
"@types/express": "^4.17.17",
|
|
92
94
|
"@types/semver": "^7.3.13",
|
|
93
95
|
"@typescript-eslint/eslint-plugin": "~5.46.1",
|
|
94
96
|
"@typescript-eslint/parser": "^5.46.1",
|
|
@@ -124,5 +126,5 @@
|
|
|
124
126
|
"publishConfig": {
|
|
125
127
|
"access": "public"
|
|
126
128
|
},
|
|
127
|
-
"gitHead": "
|
|
129
|
+
"gitHead": "e368e5e7b09008aaffdc28bbadaa8a495d7396b9"
|
|
128
130
|
}
|
package/src/errors.ts
CHANGED
|
@@ -1,53 +1,6 @@
|
|
|
1
|
-
// const Errors = {
|
|
2
|
-
// 1000: {
|
|
3
|
-
// message: "Could not refresh token",
|
|
4
|
-
// description:
|
|
5
|
-
// "You are not logged in. Log in before refreshing your authentication token.",
|
|
6
|
-
// },
|
|
7
|
-
// 1001: {
|
|
8
|
-
// message: "Failed to refresh authentication token",
|
|
9
|
-
// description:
|
|
10
|
-
// "The Prismic Authentication service returned an invalid response.",
|
|
11
|
-
// },
|
|
12
|
-
// 1002: {
|
|
13
|
-
// message: "Failed to refresh authentication token",
|
|
14
|
-
// description:
|
|
15
|
-
// "You are not logged in. Log in before attempting to get your authentication token.",
|
|
16
|
-
// },
|
|
17
|
-
// // 1000: {
|
|
18
|
-
// // message: "Unauthenticated",
|
|
19
|
-
// // description:
|
|
20
|
-
// // "Unable to access the Prismic Custom Types API. Log in to fix this issue.",
|
|
21
|
-
// // },
|
|
22
|
-
// // 1001: {
|
|
23
|
-
// // message: "Unauthorized",
|
|
24
|
-
// // description:
|
|
25
|
-
// // "Unable to access the Prismic Custom Types API. Grant the user access to the repository to fix this issue.",
|
|
26
|
-
// // },
|
|
27
|
-
// } as const;
|
|
28
|
-
// type Errors = typeof Errors;
|
|
29
|
-
|
|
30
1
|
import { HookError } from "@slicemachine/plugin-kit";
|
|
31
2
|
|
|
32
|
-
|
|
33
|
-
// Unauthorized: "Unauthorized",
|
|
34
|
-
// Unauthenticated: "Unauthenticated",
|
|
35
|
-
// InternalServerError: "InternalServerError",
|
|
36
|
-
// } as const;
|
|
37
|
-
// type InternalErrorCodes =
|
|
38
|
-
// typeof InternalErrorCodes[keyof typeof InternalErrorCodes];
|
|
39
|
-
|
|
40
|
-
// type InternalErrorCode =
|
|
41
|
-
// | typeof InternalError.Unauthorized
|
|
42
|
-
// | typeof InternalError.Unauthenticated
|
|
43
|
-
// | typeof InternalError.InternalServerError;
|
|
44
|
-
|
|
45
|
-
// type InternalErrorArgs = {
|
|
46
|
-
// message?: string;
|
|
47
|
-
// cause?: Error;
|
|
48
|
-
// };
|
|
49
|
-
|
|
50
|
-
export abstract class SliceMachineError extends Error {
|
|
3
|
+
export class SliceMachineError extends Error {
|
|
51
4
|
_sliceMachineError = true;
|
|
52
5
|
name = "SliceMachineError";
|
|
53
6
|
}
|
|
@@ -118,29 +71,3 @@ export const isUnexpectedDataError = (
|
|
|
118
71
|
export const isInternalError = (error: unknown): error is InternalError => {
|
|
119
72
|
return isSliceMachineError(error) && error.name === InternalError.name;
|
|
120
73
|
};
|
|
121
|
-
|
|
122
|
-
// export class InternalError<TCode extends InternalErrorCode> extends Error {
|
|
123
|
-
// static Unauthorized = "Unauthorized" as const;
|
|
124
|
-
// static Unauthenticated = "Unauthenticated" as const;
|
|
125
|
-
// static InternalServerError = "InternalServerError" as const;
|
|
126
|
-
//
|
|
127
|
-
// code: TCode;
|
|
128
|
-
// cause?: Error;
|
|
129
|
-
//
|
|
130
|
-
// constructor(code: TCode, args: InternalErrorArgs = {}) {
|
|
131
|
-
// super(args.message);
|
|
132
|
-
//
|
|
133
|
-
// this.code = code;
|
|
134
|
-
// this.cause = args.cause;
|
|
135
|
-
//
|
|
136
|
-
// // const error = Errors[code];
|
|
137
|
-
//
|
|
138
|
-
// // this.message = error.message as TMessage;
|
|
139
|
-
//
|
|
140
|
-
// // if ("description" in error) {
|
|
141
|
-
// // this.description = error.description as TDescription;
|
|
142
|
-
// // } else {
|
|
143
|
-
// // this.description = undefined as TDescription;
|
|
144
|
-
// // }
|
|
145
|
-
// }
|
|
146
|
-
// }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { API_ENDPOINTS } from "../constants/API_ENDPOINTS";
|
|
2
|
+
|
|
3
|
+
export type BuildPrismicRepositoryAPIEndpointConfig = {
|
|
4
|
+
withCDN?: boolean;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export const buildPrismicRepositoryAPIEndpoint = (
|
|
8
|
+
repositoryName: string,
|
|
9
|
+
{ withCDN = true }: BuildPrismicRepositoryAPIEndpointConfig = {},
|
|
10
|
+
): string => {
|
|
11
|
+
const baseEndpoint = new URL(API_ENDPOINTS.PrismicWroom);
|
|
12
|
+
|
|
13
|
+
return `${baseEndpoint.protocol}://${repositoryName}${
|
|
14
|
+
withCDN ? ".cdn" : ""
|
|
15
|
+
}.${baseEndpoint.host}/api/v2`;
|
|
16
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as t from "io-ts";
|
|
2
|
+
|
|
3
|
+
import { decode, DecodeReturnType } from "./decode";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A minimally defined codec for package.json files. Only data needed for
|
|
7
|
+
* version detection is defined.
|
|
8
|
+
*/
|
|
9
|
+
const PackageJSONCodec = t.type({
|
|
10
|
+
version: t.string,
|
|
11
|
+
});
|
|
12
|
+
type PackageJSON = t.TypeOf<typeof PackageJSONCodec>;
|
|
13
|
+
|
|
14
|
+
export const decodePackageJSON = (
|
|
15
|
+
input: unknown,
|
|
16
|
+
): DecodeReturnType<PackageJSON, PackageJSON, unknown> => {
|
|
17
|
+
return decode(PackageJSONCodec, input);
|
|
18
|
+
};
|
|
@@ -24,25 +24,21 @@ export const locateFileUpward = async (
|
|
|
24
24
|
|
|
25
25
|
const filePaths = castArray(filePathOrPaths);
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const resolvedFilePath = path.resolve(startDir, filePath);
|
|
27
|
+
for (const filePath of filePaths) {
|
|
28
|
+
const resolvedFilePath = path.resolve(startDir, filePath);
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
try {
|
|
31
|
+
await fs.access(resolvedFilePath);
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
33
|
+
return resolvedFilePath;
|
|
34
|
+
} catch {
|
|
35
|
+
continue;
|
|
38
36
|
}
|
|
39
|
-
} catch {
|
|
40
|
-
// noop
|
|
41
37
|
}
|
|
42
38
|
|
|
43
39
|
if (startDir === stopDir) {
|
|
44
40
|
const formattedFilePaths = filePaths
|
|
45
|
-
.map((filePath) =>
|
|
41
|
+
.map((filePath) => "`" + filePath + "`")
|
|
46
42
|
.join(" or ");
|
|
47
43
|
|
|
48
44
|
throw new Error(
|
|
@@ -7,18 +7,15 @@ import {
|
|
|
7
7
|
|
|
8
8
|
import { createContentDigest } from "../lib/createContentDigest";
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
PackageChangelog,
|
|
12
|
-
PackageManager,
|
|
13
|
-
// PackageVersion,
|
|
14
|
-
SliceMachineConfig,
|
|
15
|
-
} from "../types";
|
|
10
|
+
import { PackageChangelog, PackageManager, SliceMachineConfig } from "../types";
|
|
16
11
|
import {
|
|
17
12
|
PrismicAuthManager,
|
|
18
13
|
PrismicUserProfile,
|
|
19
14
|
} from "../auth/PrismicAuthManager";
|
|
20
15
|
import { createPrismicAuthManager } from "../auth/createPrismicAuthManager";
|
|
21
16
|
|
|
17
|
+
import { API_ENDPOINTS, APIEndpoints } from "../constants/API_ENDPOINTS";
|
|
18
|
+
|
|
22
19
|
import { UserManager } from "./user/UserManager";
|
|
23
20
|
import { PrismicRepositoryManager } from "./prismicRepository/PrismicRepositoryManager";
|
|
24
21
|
|
|
@@ -34,18 +31,20 @@ import { SimulatorManager } from "./simulator/SimulatorManager";
|
|
|
34
31
|
import { VersionsManager } from "./versions/VersionsManager";
|
|
35
32
|
|
|
36
33
|
import { TelemetryManager } from "./telemetry/TelemetryManager";
|
|
34
|
+
import { buildPrismicRepositoryAPIEndpoint } from "../lib/buildPrismicRepositoryAPIEndpoint";
|
|
37
35
|
|
|
38
36
|
type SliceMachineManagerGetStateReturnType = {
|
|
39
37
|
env: {
|
|
40
38
|
shortId?: string;
|
|
41
39
|
intercomHash?: string;
|
|
42
40
|
manifest: {
|
|
41
|
+
apiEndpoint: string;
|
|
43
42
|
localSliceSimulatorURL?: string;
|
|
44
43
|
};
|
|
45
44
|
repo: string;
|
|
46
45
|
changelog?: PackageChangelog;
|
|
47
46
|
packageManager: PackageManager;
|
|
48
|
-
mockConfig: unknown;
|
|
47
|
+
mockConfig: unknown; // TODO: Remove
|
|
49
48
|
framework: unknown; // TODO: Remove
|
|
50
49
|
sliceMachineAPIUrl: string;
|
|
51
50
|
};
|
|
@@ -69,6 +68,7 @@ type SliceMachineManagerGetStateReturnType = {
|
|
|
69
68
|
}
|
|
70
69
|
>;
|
|
71
70
|
mock?: SharedSliceContent[];
|
|
71
|
+
mockConfig: unknown; // TODO: Remove
|
|
72
72
|
}[];
|
|
73
73
|
meta: {
|
|
74
74
|
name?: string;
|
|
@@ -81,7 +81,12 @@ type SliceMachineManagerGetStateReturnType = {
|
|
|
81
81
|
customTypes: CustomTypes.CustomType[];
|
|
82
82
|
remoteCustomTypes: CustomTypes.CustomType[];
|
|
83
83
|
remoteSlices: CustomTypes.Widgets.Slices.SharedSlice[];
|
|
84
|
-
clientError?: {
|
|
84
|
+
clientError?: {
|
|
85
|
+
name: string;
|
|
86
|
+
message: string;
|
|
87
|
+
status: number;
|
|
88
|
+
reason: string;
|
|
89
|
+
};
|
|
85
90
|
};
|
|
86
91
|
|
|
87
92
|
type SliceMachineManagerConstructorArgs = {
|
|
@@ -153,6 +158,10 @@ export class SliceMachineManager {
|
|
|
153
158
|
return this._prismicAuthManager;
|
|
154
159
|
}
|
|
155
160
|
|
|
161
|
+
getAPIEndpoints(): APIEndpoints {
|
|
162
|
+
return API_ENDPOINTS;
|
|
163
|
+
}
|
|
164
|
+
|
|
156
165
|
// TODO: Remove this global-state method. It is expensive and a
|
|
157
166
|
// potential source of bugs due to data inconsistency. SM UI relies on
|
|
158
167
|
// it heavily, so removal will require significant effort.
|
|
@@ -161,8 +170,6 @@ export class SliceMachineManager {
|
|
|
161
170
|
{ sliceMachineConfig, libraries },
|
|
162
171
|
{ profile, remoteCustomTypes, remoteSlices },
|
|
163
172
|
customTypes,
|
|
164
|
-
// currentVersion,
|
|
165
|
-
// allStableVersions,
|
|
166
173
|
] = await Promise.all([
|
|
167
174
|
this.project.getSliceMachineConfig().then(async (sliceMachineConfig) => {
|
|
168
175
|
const libraries = await this._getLibraries(sliceMachineConfig);
|
|
@@ -190,39 +197,31 @@ export class SliceMachineManager {
|
|
|
190
197
|
}
|
|
191
198
|
}),
|
|
192
199
|
this._getCustomTypes(),
|
|
193
|
-
// this.versions.getRunningSliceMachineVersion(),
|
|
194
|
-
// this.versions.getAllStableSliceMachineVersions(),
|
|
195
200
|
]);
|
|
196
201
|
|
|
197
|
-
// const latestNonBreakingVersion = ""; // TODO
|
|
198
|
-
// const updateAvailable = false; // TODO
|
|
199
|
-
// const versions = await Promise.all(
|
|
200
|
-
// allStableVersions.map(async (version): Promise<PackageVersion> => {
|
|
201
|
-
// const releaseNotes =
|
|
202
|
-
// await this.versions.getSliceMachineReleaseNotesForVersion({
|
|
203
|
-
// version,
|
|
204
|
-
// });
|
|
205
|
-
//
|
|
206
|
-
// return {
|
|
207
|
-
// versionNumber: version,
|
|
208
|
-
// releaseNote: releaseNotes ?? null,
|
|
209
|
-
// // TODO
|
|
210
|
-
// kind: "MINOR",
|
|
211
|
-
// };
|
|
212
|
-
// }),
|
|
213
|
-
// );
|
|
214
|
-
|
|
215
202
|
// TODO: SM UI detects if a user is logged out by looking at
|
|
216
203
|
// `clientError`. Here, we simulate what the old core does by
|
|
217
204
|
// returning an `ErrorWithStatus`-like object if the user is
|
|
218
205
|
// not logged in.
|
|
219
206
|
const clientError: SliceMachineManagerGetStateReturnType["clientError"] =
|
|
220
|
-
profile
|
|
207
|
+
profile
|
|
208
|
+
? undefined
|
|
209
|
+
: {
|
|
210
|
+
name: "__stub__",
|
|
211
|
+
message: "__stub__",
|
|
212
|
+
reason: "__stub__",
|
|
213
|
+
status: 401, // Needed to trigger the unauthorized flow.
|
|
214
|
+
};
|
|
221
215
|
|
|
222
216
|
return {
|
|
223
217
|
env: {
|
|
224
218
|
framework: "",
|
|
225
219
|
manifest: {
|
|
220
|
+
apiEndpoint:
|
|
221
|
+
sliceMachineConfig.apiEndpoint ||
|
|
222
|
+
buildPrismicRepositoryAPIEndpoint(
|
|
223
|
+
sliceMachineConfig.repositoryName,
|
|
224
|
+
),
|
|
226
225
|
localSliceSimulatorURL: sliceMachineConfig.localSliceSimulatorURL,
|
|
227
226
|
},
|
|
228
227
|
mockConfig: {},
|
|
@@ -309,6 +308,7 @@ export class SliceMachineManager {
|
|
|
309
308
|
model,
|
|
310
309
|
screenshots,
|
|
311
310
|
mock: mocks,
|
|
311
|
+
mockConfig: {}, // TODO: This property can probably be removed.
|
|
312
312
|
});
|
|
313
313
|
}
|
|
314
314
|
}),
|