ember-browser-services 5.0.0 → 5.0.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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # ember-browser-services
2
2
 
3
+ ## 5.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#425](https://github.com/CrowdStrike/ember-browser-services/pull/425) [`71e831a`](https://github.com/CrowdStrike/ember-browser-services/commit/71e831ab0949664868370d5e3d35139f0c61eea5) Thanks [@MrChocolatine](https://github.com/MrChocolatine)! - Unregister services before they are registered in `setupBrowserFakes()`
8
+
9
+ Fixes https://github.com/CrowdStrike/ember-browser-services/issues/413
10
+
3
11
  ## 5.0.0
4
12
 
5
13
  ### Major Changes
@@ -18,20 +18,25 @@ function setupBrowserFakes(hooks, options) {
18
18
  let owner = this.owner;
19
19
  if (options.window) {
20
20
  let service = maybeMake(options.window, window);
21
+ owner.unregister('service:browser/window');
21
22
  owner.register('service:browser/window', service);
22
23
  }
23
24
  if (options.document) {
24
25
  let service = maybeMake(options.document, window.document);
26
+ owner.unregister('service:browser/document');
25
27
  owner.register('service:browser/document', service);
26
28
  }
27
29
  if (options.localStorage) {
30
+ owner.unregister('service:browser/local-storage');
28
31
  owner.register('service:browser/local-storage', FakeLocalStorageService);
29
32
  }
30
33
  if (options.sessionStorage) {
34
+ owner.unregister('service:browser/session-storage');
31
35
  owner.register('service:browser/session-storage', FakeSessionStorageService);
32
36
  }
33
37
  if (options.navigator) {
34
38
  let service = maybeMake(options.navigator, window.navigator);
39
+ owner.unregister('service:browser/navigator');
35
40
  owner.register('service:browser/navigator', service);
36
41
  }
37
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import Service from '@ember/service';\n\nimport window from 'ember-window-mock';\n\nimport { setupWindowMock } from 'ember-window-mock/test-support';\n\nimport { proxyService } from '../services/browser/-proxy-service';\nimport {\n FakeLocalStorageService,\n FakeSessionStorageService,\n} from './-private/web-storage';\n\nimport type { RecursivePartial } from '../types';\n\ntype Fakes = {\n window?: boolean | typeof Service | RecursivePartial<Window>;\n localStorage?: boolean;\n sessionStorage?: boolean;\n document?: boolean | typeof Service | RecursivePartial<Document>;\n navigator?: boolean | RecursivePartial<Navigator>;\n};\n\nexport function setupBrowserFakes(hooks: NestedHooks, options: Fakes): void {\n setupWindowMock(hooks);\n\n // Switched to 'any' from 'TestContext' due to awkward migration period from\n // DT to built-in-types.\n // I don't know if it's possible to support both fake test-helper types and real ones\n // (simultaneously)\n //\n // Additionally, these types have no bearing on end-user behavior, so this is low risk.\n hooks.beforeEach(function (this: any) {\n // the type for the owner keeps being wrong............\n let owner = this.owner as unknown as {\n register: (name: string, thing: unknown) => void;\n unregister: (name: string) => void;\n };\n\n if (options.window) {\n let service = maybeMake(options.window, window);\n\n owner.register('service:browser/window', service);\n }\n\n if (options.document) {\n let service = maybeMake(options.document, window.document);\n\n owner.register('service:browser/document', service);\n }\n\n if (options.localStorage) {\n owner.register('service:browser/local-storage', FakeLocalStorageService);\n }\n\n if (options.sessionStorage) {\n owner.register(\n 'service:browser/session-storage',\n FakeSessionStorageService\n );\n }\n\n if (options.navigator) {\n let service = maybeMake(options.navigator, window.navigator);\n\n owner.register('service:browser/navigator', service);\n }\n });\n}\n\n// this usage of any is correct, because it literally could be *any*thing\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype UnknownObject = Record<string, any>;\n\nexport function maybeMake<\n DefaultType extends UnknownObject,\n TestClass extends UnknownObject\n>(\n maybeImplementation:\n | true\n | typeof Service\n | TestClass\n | RecursivePartial<DefaultType>,\n target: DefaultType\n): DefaultType {\n if (maybeImplementation === true) {\n return proxyService(target);\n }\n\n if (maybeImplementation.prototype instanceof Service) {\n return target;\n }\n\n if (typeof maybeImplementation === 'object') {\n applyStub(target, maybeImplementation);\n\n return proxyService(target);\n }\n\n return proxyService(target);\n}\n\n// we are already using ember-window-mock, so the proxy internal to that package will\n// \"just handle\" setting stuff on the window\nfunction applyStub(root: any, partial?: any) {\n if (!partial) return root;\n\n for (let key of Object.keys(partial)) {\n let value = partial[key];\n\n if (Array.isArray(value)) {\n root[key] = value;\n } else if (typeof value === 'object') {\n applyStub(root[key], value);\n } else {\n root[key] = value;\n }\n }\n}\n"],"names":["setupBrowserFakes","hooks","options","setupWindowMock","beforeEach","owner","window","service","maybeMake","register","document","localStorage","FakeLocalStorageService","sessionStorage","FakeSessionStorageService","navigator","maybeImplementation","target","proxyService","prototype","Service","applyStub","root","partial","key","Object","keys","value","Array","isArray"],"mappings":";;;;;;AAsBO,SAASA,iBAAiBA,CAACC,KAAkB,EAAEC,OAAc,EAAQ;EAC1EC,eAAe,CAACF,KAAK,CAAC,CAAA;;AAEtB;AACA;AACA;AACA;AACA;AACA;EACAA,KAAK,CAACG,UAAU,CAAC,YAAqB;AACpC;AACA,IAAA,IAAIC,KAAK,GAAG,IAAI,CAACA,KAGhB,CAAA;IAED,IAAIH,OAAO,CAACI,MAAM,EAAE;MAClB,IAAIC,OAAO,GAAGC,SAAS,CAACN,OAAO,CAACI,MAAM,EAAEA,MAAM,CAAC,CAAA;AAE/CD,MAAAA,KAAK,CAACI,QAAQ,CAAC,wBAAwB,EAAEF,OAAO,CAAC,CAAA;AACnD,KAAA;IAEA,IAAIL,OAAO,CAACQ,QAAQ,EAAE;MACpB,IAAIH,OAAO,GAAGC,SAAS,CAACN,OAAO,CAACQ,QAAQ,EAAEJ,MAAM,CAACI,QAAQ,CAAC,CAAA;AAE1DL,MAAAA,KAAK,CAACI,QAAQ,CAAC,0BAA0B,EAAEF,OAAO,CAAC,CAAA;AACrD,KAAA;IAEA,IAAIL,OAAO,CAACS,YAAY,EAAE;AACxBN,MAAAA,KAAK,CAACI,QAAQ,CAAC,+BAA+B,EAAEG,uBAAuB,CAAC,CAAA;AAC1E,KAAA;IAEA,IAAIV,OAAO,CAACW,cAAc,EAAE;AAC1BR,MAAAA,KAAK,CAACI,QAAQ,CACZ,iCAAiC,EACjCK,yBACF,CAAC,CAAA;AACH,KAAA;IAEA,IAAIZ,OAAO,CAACa,SAAS,EAAE;MACrB,IAAIR,OAAO,GAAGC,SAAS,CAACN,OAAO,CAACa,SAAS,EAAET,MAAM,CAACS,SAAS,CAAC,CAAA;AAE5DV,MAAAA,KAAK,CAACI,QAAQ,CAAC,2BAA2B,EAAEF,OAAO,CAAC,CAAA;AACtD,KAAA;AACF,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;;AAGO,SAASC,SAASA,CAIvBQ,mBAIiC,EACjCC,MAAmB,EACN;EACb,IAAID,mBAAmB,KAAK,IAAI,EAAE;IAChC,OAAOE,YAAY,CAACD,MAAM,CAAC,CAAA;AAC7B,GAAA;AAEA,EAAA,IAAID,mBAAmB,CAACG,SAAS,YAAYC,OAAO,EAAE;AACpD,IAAA,OAAOH,MAAM,CAAA;AACf,GAAA;AAEA,EAAA,IAAI,OAAOD,mBAAmB,KAAK,QAAQ,EAAE;AAC3CK,IAAAA,SAAS,CAACJ,MAAM,EAAED,mBAAmB,CAAC,CAAA;IAEtC,OAAOE,YAAY,CAACD,MAAM,CAAC,CAAA;AAC7B,GAAA;EAEA,OAAOC,YAAY,CAACD,MAAM,CAAC,CAAA;AAC7B,CAAA;;AAEA;AACA;AACA,SAASI,SAASA,CAACC,IAAS,EAAEC,OAAa,EAAE;AAC3C,EAAA,IAAI,CAACA,OAAO,EAAE,OAAOD,IAAI,CAAA;EAEzB,KAAK,IAAIE,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACH,OAAO,CAAC,EAAE;AACpC,IAAA,IAAII,KAAK,GAAGJ,OAAO,CAACC,GAAG,CAAC,CAAA;AAExB,IAAA,IAAII,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;AACxBL,MAAAA,IAAI,CAACE,GAAG,CAAC,GAAGG,KAAK,CAAA;AACnB,KAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACpCN,MAAAA,SAAS,CAACC,IAAI,CAACE,GAAG,CAAC,EAAEG,KAAK,CAAC,CAAA;AAC7B,KAAC,MAAM;AACLL,MAAAA,IAAI,CAACE,GAAG,CAAC,GAAGG,KAAK,CAAA;AACnB,KAAA;AACF,GAAA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/test-support/index.ts"],"sourcesContent":["import Service from '@ember/service';\n\nimport window from 'ember-window-mock';\n\nimport { setupWindowMock } from 'ember-window-mock/test-support';\n\nimport { proxyService } from '../services/browser/-proxy-service';\nimport {\n FakeLocalStorageService,\n FakeSessionStorageService,\n} from './-private/web-storage';\n\nimport type { RecursivePartial } from '../types';\n\ntype Fakes = {\n window?: boolean | typeof Service | RecursivePartial<Window>;\n localStorage?: boolean;\n sessionStorage?: boolean;\n document?: boolean | typeof Service | RecursivePartial<Document>;\n navigator?: boolean | RecursivePartial<Navigator>;\n};\n\nexport function setupBrowserFakes(hooks: NestedHooks, options: Fakes): void {\n setupWindowMock(hooks);\n\n // Switched to 'any' from 'TestContext' due to awkward migration period from\n // DT to built-in-types.\n // I don't know if it's possible to support both fake test-helper types and real ones\n // (simultaneously)\n //\n // Additionally, these types have no bearing on end-user behavior, so this is low risk.\n hooks.beforeEach(function (this: any) {\n // the type for the owner keeps being wrong............\n let owner = this.owner as unknown as {\n register: (name: string, thing: unknown) => void;\n unregister: (name: string) => void;\n };\n\n if (options.window) {\n let service = maybeMake(options.window, window);\n\n owner.unregister('service:browser/window');\n owner.register('service:browser/window', service);\n }\n\n if (options.document) {\n let service = maybeMake(options.document, window.document);\n\n owner.unregister('service:browser/document');\n owner.register('service:browser/document', service);\n }\n\n if (options.localStorage) {\n owner.unregister('service:browser/local-storage');\n owner.register('service:browser/local-storage', FakeLocalStorageService);\n }\n\n if (options.sessionStorage) {\n owner.unregister('service:browser/session-storage');\n owner.register(\n 'service:browser/session-storage',\n FakeSessionStorageService\n );\n }\n\n if (options.navigator) {\n let service = maybeMake(options.navigator, window.navigator);\n\n owner.unregister('service:browser/navigator');\n owner.register('service:browser/navigator', service);\n }\n });\n}\n\n// this usage of any is correct, because it literally could be *any*thing\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype UnknownObject = Record<string, any>;\n\nexport function maybeMake<\n DefaultType extends UnknownObject,\n TestClass extends UnknownObject\n>(\n maybeImplementation:\n | true\n | typeof Service\n | TestClass\n | RecursivePartial<DefaultType>,\n target: DefaultType\n): DefaultType {\n if (maybeImplementation === true) {\n return proxyService(target);\n }\n\n if (maybeImplementation.prototype instanceof Service) {\n return target;\n }\n\n if (typeof maybeImplementation === 'object') {\n applyStub(target, maybeImplementation);\n\n return proxyService(target);\n }\n\n return proxyService(target);\n}\n\n// we are already using ember-window-mock, so the proxy internal to that package will\n// \"just handle\" setting stuff on the window\nfunction applyStub(root: any, partial?: any) {\n if (!partial) return root;\n\n for (let key of Object.keys(partial)) {\n let value = partial[key];\n\n if (Array.isArray(value)) {\n root[key] = value;\n } else if (typeof value === 'object') {\n applyStub(root[key], value);\n } else {\n root[key] = value;\n }\n }\n}\n"],"names":["setupBrowserFakes","hooks","options","setupWindowMock","beforeEach","owner","window","service","maybeMake","unregister","register","document","localStorage","FakeLocalStorageService","sessionStorage","FakeSessionStorageService","navigator","maybeImplementation","target","proxyService","prototype","Service","applyStub","root","partial","key","Object","keys","value","Array","isArray"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ember-browser-services",
3
- "version": "5.0.0",
3
+ "version": "5.0.1",
4
4
  "description": "Browser APIs as services for easier testing",
5
5
  "repository": "https://github.com/CrowdStrike/ember-browser-services",
6
6
  "license": "MIT",
@@ -38,13 +38,13 @@
38
38
  "ember-window-mock": "^1.0.1"
39
39
  },
40
40
  "devDependencies": {
41
- "@babel/core": "7.25.2",
41
+ "@babel/core": "7.25.8",
42
42
  "@babel/eslint-parser": "^7.19.1",
43
43
  "@babel/plugin-proposal-class-properties": "7.18.6",
44
- "@babel/plugin-proposal-decorators": "7.24.7",
45
- "@babel/plugin-syntax-decorators": "7.24.7",
46
- "@babel/plugin-transform-typescript": "7.25.2",
47
- "@babel/preset-typescript": "7.24.7",
44
+ "@babel/plugin-proposal-decorators": "7.25.7",
45
+ "@babel/plugin-syntax-decorators": "7.25.7",
46
+ "@babel/plugin-transform-typescript": "7.25.7",
47
+ "@babel/preset-typescript": "7.25.7",
48
48
  "@embroider/addon-dev": "3.2.0",
49
49
  "@nullvoxpopuli/eslint-configs": "3.2.2",
50
50
  "@types/ember__application": "^4.0.0",
@@ -54,7 +54,7 @@
54
54
  "@types/qunit": "^2.11.3",
55
55
  "@typescript-eslint/eslint-plugin": "5.55.0",
56
56
  "@typescript-eslint/parser": "^5.50.0",
57
- "concurrently": "8.2.2",
57
+ "concurrently": "9.0.1",
58
58
  "ember-source": "3.28.12",
59
59
  "eslint": "^8.33.0",
60
60
  "eslint-plugin-decorator-position": "5.0.2",
@@ -64,9 +64,9 @@
64
64
  "eslint-plugin-node": "11.1.0",
65
65
  "eslint-plugin-simple-import-sort": "10.0.0",
66
66
  "prettier": "^2.8.3",
67
- "rollup": "3.29.4",
67
+ "rollup": "3.29.5",
68
68
  "rollup-plugin-copy": "^3.4.0",
69
- "rollup-plugin-ts": "3.2.0",
69
+ "rollup-plugin-ts": "3.4.5",
70
70
  "typescript": "4.9.5"
71
71
  },
72
72
  "publishConfig": {