From d23a011142803339efb100735ad50d681b6755cf Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Mon, 29 Jan 2024 22:13:53 +0100
Subject: [PATCH 01/20] Add guide draft for incremental adoption
---
guides/drafts/incremental-adoption-guide.md | 115 ++++++++++++++++++++
1 file changed, 115 insertions(+)
create mode 100644 guides/drafts/incremental-adoption-guide.md
diff --git a/guides/drafts/incremental-adoption-guide.md b/guides/drafts/incremental-adoption-guide.md
new file mode 100644
index 00000000000..0e9c5d02aca
--- /dev/null
+++ b/guides/drafts/incremental-adoption-guide.md
@@ -0,0 +1,115 @@
+# Incremental adoption guide for existing projects
+
+Nav links
+
+---
+
+This guide is for existing projects that want to adopt the new APIs of the EmberData incrementally. If you are starting a new project, you should use the [new project guide](./new-project-guide.md).
+
+## Step 1: Upgrade to EmberData 4.12.x
+
+This version of EmberData is the first version that supports the new APIs. It also a LTS version, so you can stay on it for a while. You can refer the [EmberData Compatibility table](https://github.com/emberjs/data/blob/main/README.md#compatibility) to see which version of EmberData is compatible with your Ember version.
+
+## Step 2: Add `Store` service to your application
+
+You would need to create you own store service. Before it was automatically injected by Ember Data.
+Here is how you do it:
+
+```ts
+// eslint-disable-next-line ember/use-ember-data-rfc-395-imports
+import Store from 'ember-data/store';
+import { service } from '@ember/service';
+import RequestManager from '@ember-data/request';
+
+export default class MyStore extends Store {
+ @service declare requestManager: RequestManager;
+}
+
+```
+
+Notice we still want to import the `Store` class from `ember-data/store` package. You might have a lint rule that says don't do it. You can disable it for this import. The reason we want to import it from `ember-data/store` is because we want to use Ember Data models, serializers, adapters, etc. and alongside we want to start utilizing new APIs.
+
+## Step 3: Add `RequestManager` service to your application
+
+Now let's create our very own `RequestManager` service. It is a service that is responsible for sending requests to the server. It is a composable class, which means you can add your own request handlers to it. In the example below we are adding `LegacyNetworkHandler`, `TestHandler` and `Fetch` handlers.
+
+```ts
+import RequestManager from '@ember-data/request';
+import Fetch from '@ember-data/request/fetch';
+import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
+import { CacheHandler } from 'ember-data/store';
+import { setBuildURLConfig } from '@ember-data/request-utils';
+
+const TestHandler = {
+ async request({ request }, next) {
+ console.log('TestHandler.request', request);
+
+ const newContext = await next(request);
+
+ console.log('TestHandler.response after fetch', newContext.response);
+
+ return next(newContext);
+ },
+};
+
+export default class Requests extends RequestManager {
+ constructor(args) {
+ super(args);
+ this.use([LegacyNetworkHandler, TestHandler, Fetch]);
+ this.useCache(CacheHandler);
+ }
+}
+```
+
+Let's go over the code above:
+
+1. `LegacyNetworkHandler` is the handler that is responsible for sending requests to the server using the old APIs. It will interrupt handlers chain if it detects request using old APIs. It will process it as it used to be doing with Adapters/Fetch/Serializers workflow.
+
+2. Next is `TestHandler`. It is a handler that is responsible for logging requests. It is a quick example of how you can add your own handlers to the request manager. We will take a look at more useful examples later.
+
+3. Lastly `Fetch`. It is a handler that is responsible for sending requests to the server using the new Ember Data APIs. It must be last handler you put in the chain. After finishing request it will enrich handlers context with `response` property. And pass it back to the handlers chain in reverse order. So `TestHandler` will receive `response` property first, and so on if we would have any.
+
+You can read more about request manager in the [request manager guide](./request-manager-guide.md).
+
+## Step 4: Install `@ember-data/json-api`, `@ember-data/request-utils` packages
+
+If you was using JSON:API adapter/serializer for your backend communication, you can use `@ember-data/json-api` package. It is a package that contains predefined builders for JSON:API requests. You can read more about it in the [`@ember-data/json-api` guide](TODO: add link).
+
+If you have different backend format - Ember Data provides you with builders for `REST`(@ember-data/rest) and `ActiveRecord`(@ember-data/active-record).
+
+## Step 5: Off you go! Start using new APIs
+
+Now you can start refactoring old code to use new APIs. You can start with the `findAll` method. It is the easiest one to refactor. Here is how you do it:
+
+```diff app/components/projects/list.ts
++ import { query } from '@ember-data/json-api/request';
+
+ loadProjects: Task = task(async () => {
+- const projects = await this.store.findAll('project');
+- this.projects = [...projects];
++ const { content } = await this.store.request(query('project', {}, { host: config.api.host }));
++ this.projects = content.data;
+ });
+```
+
+You most likely would need to add Auth Handler to your request manager to add `accessToken` to your requests.
+Let's say you have your `accessToken` in the `session` service. Here is how you can add it to the request manager:
+
+```js auth-handler.js
+import { inject as service } from '@ember/service';
+
+export default class AuthHandler {
+ @service session;
+
+ request({ request }, next) {
+ const headers = new Headers(request.headers);
+ headers.append(
+ 'Authorization',
+ `Bearer ${this.session.accessToken}`,
+ );
+
+ return next(Object.assign({}, request, { headers }));
+ }
+}
+```
+
From c7c74b5473f5b9739be2e7ddd4a49e57d63df9ab Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Mon, 19 Feb 2024 10:58:33 +0100
Subject: [PATCH 02/20] Apply suggestions from @runspired
Co-authored-by: Chris Thoburn
---
guides/drafts/incremental-adoption-guide.md | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/guides/drafts/incremental-adoption-guide.md b/guides/drafts/incremental-adoption-guide.md
index 0e9c5d02aca..dd496c9dc76 100644
--- a/guides/drafts/incremental-adoption-guide.md
+++ b/guides/drafts/incremental-adoption-guide.md
@@ -8,11 +8,11 @@ This guide is for existing projects that want to adopt the new APIs of the Ember
## Step 1: Upgrade to EmberData 4.12.x
-This version of EmberData is the first version that supports the new APIs. It also a LTS version, so you can stay on it for a while. You can refer the [EmberData Compatibility table](https://github.com/emberjs/data/blob/main/README.md#compatibility) to see which version of EmberData is compatible with your Ember version.
+This version of EmberData is the first version that supports the new APIs. It is also a LTS version, so you can stay on it for a while. You can refer the [EmberData Compatibility table](https://github.com/emberjs/data/blob/main/README.md#compatibility) to see which version of EmberData is compatible with your Ember version.
## Step 2: Add `Store` service to your application
-You would need to create you own store service. Before it was automatically injected by Ember Data.
+You will need to create your own store service. Before, a store service was automatically injected by EmberData.
Here is how you do it:
```ts
@@ -27,7 +27,7 @@ export default class MyStore extends Store {
```
-Notice we still want to import the `Store` class from `ember-data/store` package. You might have a lint rule that says don't do it. You can disable it for this import. The reason we want to import it from `ember-data/store` is because we want to use Ember Data models, serializers, adapters, etc. and alongside we want to start utilizing new APIs.
+Notice we still want to import the `Store` class from `ember-data/store` package. You might have a lint rule that says don't do it. You can disable it for this import. The reason we want to import it from `ember-data/store` is because we want to use EmberData models, serializers, adapters, etc. while alongside we want to start utilizing new APIs.
## Step 3: Add `RequestManager` service to your application
@@ -67,15 +67,15 @@ Let's go over the code above:
2. Next is `TestHandler`. It is a handler that is responsible for logging requests. It is a quick example of how you can add your own handlers to the request manager. We will take a look at more useful examples later.
-3. Lastly `Fetch`. It is a handler that is responsible for sending requests to the server using the new Ember Data APIs. It must be last handler you put in the chain. After finishing request it will enrich handlers context with `response` property. And pass it back to the handlers chain in reverse order. So `TestHandler` will receive `response` property first, and so on if we would have any.
+3. Lastly `Fetch`. It is a handler that sends requests to the server using the `fetch` API. It expects responses to be JSON and when in use it should be the last handler you put in the chain. After finishing each request it will convert the response into json and pass it back to the handlers chain in reverse order as the request context's response. So `TestHandler` will receive `response` property first, and so on if we would have any.
You can read more about request manager in the [request manager guide](./request-manager-guide.md).
## Step 4: Install `@ember-data/json-api`, `@ember-data/request-utils` packages
-If you was using JSON:API adapter/serializer for your backend communication, you can use `@ember-data/json-api` package. It is a package that contains predefined builders for JSON:API requests. You can read more about it in the [`@ember-data/json-api` guide](TODO: add link).
+If you were using JSON:API adapter/serializer for your backend communication, you can use `@ember-data/json-api` package. It is a package that contains predefined builders for JSON:API requests. You can read more about it in the [`@ember-data/json-api` guide](TODO: add link).
-If you have different backend format - Ember Data provides you with builders for `REST`(@ember-data/rest) and `ActiveRecord`(@ember-data/active-record).
+If you have different backend format - EmberData provides you with builders for `REST`(@ember-data/rest) and `ActiveRecord`(@ember-data/active-record).
## Step 5: Off you go! Start using new APIs
From be88a6e2ab64fa43349cb3a7bf69f988bb4332ad Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Sun, 25 Feb 2024 12:30:13 +0100
Subject: [PATCH 03/20] Add test app to cover adoption
---
pnpm-lock.yaml | 1221 +++++++++++++----
tests/incremental-json-api/.eslintrc.cjs | 45 +
tests/incremental-json-api/README.md | 3 +
tests/incremental-json-api/app/app.ts | 16 +
.../app/components/.gitkeep | 0
.../app/components/book-list.hbs | 22 +
.../app/components/book-list.ts | 81 ++
.../app/components/book-search.hbs | 63 +
.../app/components/book-search.ts | 56 +
.../app/components/infinite-books.hbs | 15 +
.../app/components/infinite-books.ts | 47 +
.../app/components/page-link.hbs | 3 +
.../app/config/environment.d.ts | 18 +
.../incremental-json-api/app/helpers/.gitkeep | 0
tests/incremental-json-api/app/helpers/add.ts | 3 +
tests/incremental-json-api/app/helpers/and.ts | 3 +
tests/incremental-json-api/app/helpers/eq.ts | 3 +
tests/incremental-json-api/app/helpers/gt.ts | 3 +
tests/incremental-json-api/app/helpers/lt.ts | 3 +
tests/incremental-json-api/app/helpers/mod.ts | 3 +
tests/incremental-json-api/app/helpers/neq.ts | 3 +
tests/incremental-json-api/app/helpers/not.ts | 3 +
tests/incremental-json-api/app/helpers/or.ts | 3 +
tests/incremental-json-api/app/helpers/sub.ts | 3 +
tests/incremental-json-api/app/index.html | 25 +
.../incremental-json-api/app/models/.gitkeep | 0
.../incremental-json-api/app/models/author.ts | 5 +
tests/incremental-json-api/app/models/book.ts | 9 +
.../incremental-json-api/app/models/genre.ts | 5 +
tests/incremental-json-api/app/resolver.ts | 3 +
tests/incremental-json-api/app/router.ts | 12 +
.../incremental-json-api/app/routes/.gitkeep | 0
.../app/routes/application.ts | 33 +
.../app/services/store.ts | 46 +
tests/incremental-json-api/app/styles/app.css | 56 +
.../app/templates/.gitkeep | 0
.../app/templates/application.hbs | 18 +
.../app/utils/pagination-links.ts | 69 +
.../config/environment.js | 49 +
.../config/optional-features.json | 6 +
tests/incremental-json-api/config/targets.js | 13 +
tests/incremental-json-api/ember-cli-build.js | 40 +
tests/incremental-json-api/package.json | 143 ++
tests/incremental-json-api/server/index.js | 34 +
.../server/mocks/MOCK_DATA.json | 1000 ++++++++++++++
.../incremental-json-api/server/mocks/book.js | 171 +++
tests/incremental-json-api/testem.js | 29 +
tests/incremental-json-api/tests/.gitkeep | 0
tests/incremental-json-api/tests/index.html | 68 +
.../incremental-json-api/tests/test-helper.js | 23 +
tests/incremental-json-api/tsconfig.json | 30 +
51 files changed, 3276 insertions(+), 231 deletions(-)
create mode 100644 tests/incremental-json-api/.eslintrc.cjs
create mode 100644 tests/incremental-json-api/README.md
create mode 100644 tests/incremental-json-api/app/app.ts
create mode 100644 tests/incremental-json-api/app/components/.gitkeep
create mode 100644 tests/incremental-json-api/app/components/book-list.hbs
create mode 100644 tests/incremental-json-api/app/components/book-list.ts
create mode 100644 tests/incremental-json-api/app/components/book-search.hbs
create mode 100644 tests/incremental-json-api/app/components/book-search.ts
create mode 100644 tests/incremental-json-api/app/components/infinite-books.hbs
create mode 100644 tests/incremental-json-api/app/components/infinite-books.ts
create mode 100644 tests/incremental-json-api/app/components/page-link.hbs
create mode 100644 tests/incremental-json-api/app/config/environment.d.ts
create mode 100644 tests/incremental-json-api/app/helpers/.gitkeep
create mode 100644 tests/incremental-json-api/app/helpers/add.ts
create mode 100644 tests/incremental-json-api/app/helpers/and.ts
create mode 100644 tests/incremental-json-api/app/helpers/eq.ts
create mode 100644 tests/incremental-json-api/app/helpers/gt.ts
create mode 100644 tests/incremental-json-api/app/helpers/lt.ts
create mode 100644 tests/incremental-json-api/app/helpers/mod.ts
create mode 100644 tests/incremental-json-api/app/helpers/neq.ts
create mode 100644 tests/incremental-json-api/app/helpers/not.ts
create mode 100644 tests/incremental-json-api/app/helpers/or.ts
create mode 100644 tests/incremental-json-api/app/helpers/sub.ts
create mode 100644 tests/incremental-json-api/app/index.html
create mode 100644 tests/incremental-json-api/app/models/.gitkeep
create mode 100644 tests/incremental-json-api/app/models/author.ts
create mode 100644 tests/incremental-json-api/app/models/book.ts
create mode 100644 tests/incremental-json-api/app/models/genre.ts
create mode 100644 tests/incremental-json-api/app/resolver.ts
create mode 100644 tests/incremental-json-api/app/router.ts
create mode 100644 tests/incremental-json-api/app/routes/.gitkeep
create mode 100644 tests/incremental-json-api/app/routes/application.ts
create mode 100644 tests/incremental-json-api/app/services/store.ts
create mode 100644 tests/incremental-json-api/app/styles/app.css
create mode 100644 tests/incremental-json-api/app/templates/.gitkeep
create mode 100644 tests/incremental-json-api/app/templates/application.hbs
create mode 100644 tests/incremental-json-api/app/utils/pagination-links.ts
create mode 100644 tests/incremental-json-api/config/environment.js
create mode 100644 tests/incremental-json-api/config/optional-features.json
create mode 100644 tests/incremental-json-api/config/targets.js
create mode 100644 tests/incremental-json-api/ember-cli-build.js
create mode 100644 tests/incremental-json-api/package.json
create mode 100644 tests/incremental-json-api/server/index.js
create mode 100644 tests/incremental-json-api/server/mocks/MOCK_DATA.json
create mode 100644 tests/incremental-json-api/server/mocks/book.js
create mode 100644 tests/incremental-json-api/testem.js
create mode 100644 tests/incremental-json-api/tests/.gitkeep
create mode 100644 tests/incremental-json-api/tests/index.html
create mode 100644 tests/incremental-json-api/tests/test-helper.js
create mode 100644 tests/incremental-json-api/tsconfig.json
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d0578d486f8..f3ff7342afd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -38,7 +38,7 @@ importers:
dependencies:
turbo:
specifier: ^1.12.5
- version: 1.12.5
+ version: 1.13.0
devDependencies:
'@babel/core':
specifier: ^7.24.3
@@ -48,13 +48,13 @@ importers:
version: 1.1.2(@babel/core@7.24.3)
'@glint/core':
specifier: ^1.3.0
- version: 1.3.0(typescript@5.4.3)
+ version: 1.4.0(typescript@5.4.3)
'@glint/environment-ember-loose':
specifier: ^1.3.0
- version: 1.3.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
+ version: 1.4.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
'@glint/environment-ember-template-imports':
specifier: ^1.3.0
- version: 1.3.0(@glint/environment-ember-loose@1.3.0)(@glint/template@1.4.0)
+ version: 1.4.0(@glint/environment-ember-loose@1.4.0)(@glint/template@1.4.0)
'@glint/template':
specifier: ^1.4.0
version: 1.4.0
@@ -306,13 +306,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -418,13 +418,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -547,13 +547,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -688,7 +688,7 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -767,13 +767,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -806,13 +806,13 @@ importers:
version: 0.89.0
'@glint/core':
specifier: ^1.3.0
- version: 1.3.0(typescript@5.4.3)
+ version: 1.4.0(typescript@5.4.3)
'@glint/environment-ember-loose':
specifier: ^1.3.0
- version: 1.3.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
+ version: 1.4.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
'@glint/environment-ember-template-imports':
specifier: ^1.3.0
- version: 1.3.0(@glint/environment-ember-loose@1.3.0)(@glint/template@1.4.0)
+ version: 1.4.0(@glint/environment-ember-loose@1.4.0)(@glint/template@1.4.0)
'@glint/template':
specifier: ^1.4.0
version: 1.4.0
@@ -900,13 +900,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -985,7 +985,7 @@ importers:
version: 5.3.0
hono:
specifier: ^4.1.2
- version: 4.1.2
+ version: 4.1.3
pm2:
specifier: ^5.3.1
version: 5.3.1
@@ -1001,7 +1001,7 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1076,13 +1076,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1195,13 +1195,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1328,13 +1328,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1541,13 +1541,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1613,13 +1613,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1683,13 +1683,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1808,13 +1808,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -1915,13 +1915,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -2029,13 +2029,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -2128,13 +2128,13 @@ importers:
version: 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-runtime':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
'@babel/preset-env':
specifier: ^7.24.1
- version: 7.24.1(@babel/core@7.24.3)
+ version: 7.24.3(@babel/core@7.24.3)
'@babel/preset-typescript':
specifier: ^7.24.1
version: 7.24.1(@babel/core@7.24.3)
@@ -3833,6 +3833,212 @@ importers:
ember-data:
injected: true
+ tests/incremental-json-api:
+ dependencies:
+ pnpm-sync-dependencies-meta-injected:
+ specifier: 0.0.10
+ version: 0.0.10
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.23.9
+ version: 7.24.3(supports-color@8.1.1)
+ '@babel/runtime':
+ specifier: ^7.23.9
+ version: 7.24.1
+ '@ember-data/debug':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/debug(@ember-data/store@5.4.0-alpha.43)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/graph':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/graph(@babel/core@7.24.3)(@ember-data/store@5.4.0-alpha.43)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/json-api':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/json-api(@babel/core@7.24.3)(@ember-data/graph@5.4.0-alpha.43)(@ember-data/request-utils@5.4.0-alpha.43)(@ember-data/store@5.4.0-alpha.43)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)(ember-inflector@4.0.2)
+ '@ember-data/legacy-compat':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/legacy-compat(@babel/core@7.24.3)(@ember-data/graph@5.4.0-alpha.43)(@ember-data/json-api@5.4.0-alpha.43)(@ember-data/request@5.4.0-alpha.43)(@ember-data/store@5.4.0-alpha.43)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/model':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/model(@babel/core@7.24.3)(@ember-data/debug@5.4.0-alpha.43)(@ember-data/graph@5.4.0-alpha.43)(@ember-data/json-api@5.4.0-alpha.43)(@ember-data/legacy-compat@5.4.0-alpha.43)(@ember-data/store@5.4.0-alpha.43)(@ember-data/tracking@5.4.0-alpha.43)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.0-alpha.29)(ember-inflector@4.0.2)
+ '@ember-data/private-build-infra':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/private-build-infra(@glint/template@1.4.0)
+ '@ember-data/request':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/request-utils':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/request-utils(@babel/core@7.24.3)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/store':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/store(@babel/core@7.24.3)(@ember-data/request@5.4.0-alpha.43)(@ember-data/tracking@5.4.0-alpha.43)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/tracking':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@ember-data/unpublished-test-infra':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0)
+ '@ember/edition-utils':
+ specifier: ^1.2.0
+ version: 1.2.0
+ '@ember/optional-features':
+ specifier: ^2.0.0
+ version: 2.1.0
+ '@ember/string':
+ specifier: 3.1.1
+ version: 3.1.1(@babel/core@7.24.3)
+ '@ember/test-helpers':
+ specifier: ^3.2.1
+ version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(ember-source@5.6.0)(webpack@5.91.0)
+ '@embroider/compat':
+ specifier: ^3.4.0
+ version: 3.4.6(@embroider/core@3.4.6)
+ '@embroider/core':
+ specifier: ^3.4.2
+ version: 3.4.6(@glint/template@1.4.0)
+ '@embroider/webpack':
+ specifier: ^3.2.1
+ version: 3.2.2(@embroider/core@3.4.6)(webpack@5.91.0)
+ '@glimmer/component':
+ specifier: ^1.1.2
+ version: 1.1.2(@babel/core@7.24.3)
+ '@glimmer/tracking':
+ specifier: ^1.1.2
+ version: 1.1.2
+ '@html-next/vertical-collection':
+ specifier: ^4.0.2
+ version: 4.0.2(@babel/core@7.24.3)
+ '@types/morgan':
+ specifier: ^1.9.9
+ version: 1.9.9
+ '@warp-drive/core-types':
+ specifier: workspace:0.0.0-alpha.29
+ version: file:packages/core-types(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@warp-drive/internal-config':
+ specifier: workspace:5.4.0-alpha.43
+ version: link:../../config
+ ember-auto-import:
+ specifier: ^2.7.0
+ version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli:
+ specifier: ~5.4.1
+ version: 5.4.1
+ ember-cli-babel:
+ specifier: ^8.2.0
+ version: 8.2.0(@babel/core@7.24.3)
+ ember-cli-dependency-checker:
+ specifier: ^3.3.2
+ version: 3.3.2(ember-cli@5.4.1)
+ ember-cli-htmlbars:
+ specifier: ^6.3.0
+ version: 6.3.0
+ ember-cli-inject-live-reload:
+ specifier: ^2.1.0
+ version: 2.1.0
+ ember-cli-sri:
+ specifier: ^2.1.1
+ version: 2.1.1
+ ember-cli-terser:
+ specifier: ~4.0.2
+ version: 4.0.2
+ ember-cli-test-loader:
+ specifier: ^3.1.0
+ version: 3.1.0(@babel/core@7.24.3)
+ ember-data:
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/-ember-data(@babel/core@7.24.3)(@ember/string@3.1.1)
+ ember-disable-prototype-extensions:
+ specifier: ^1.1.3
+ version: 1.1.3
+ ember-inflector:
+ specifier: ^4.0.2
+ version: 4.0.2(@babel/core@7.24.3)
+ ember-load-initializers:
+ specifier: ^2.1.2
+ version: 2.1.2(@babel/core@7.24.3)
+ ember-maybe-import-regenerator:
+ specifier: ^1.0.0
+ version: 1.0.0(@babel/core@7.24.3)
+ ember-page-title:
+ specifier: ^8.2.2
+ version: 8.2.3(ember-source@5.6.0)
+ ember-qunit:
+ specifier: ^8.0.2
+ version: 8.0.2(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.6.0)(qunit@2.19.4)
+ ember-resolver:
+ specifier: ^11.0.1
+ version: 11.0.1(@babel/core@7.24.3)(ember-source@5.6.0)
+ ember-source:
+ specifier: ~5.6.0
+ version: 5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0)
+ ember-source-channel-url:
+ specifier: ^3.0.0
+ version: 3.0.0
+ ember-try:
+ specifier: ^3.0.0
+ version: 3.0.0
+ express:
+ specifier: ^4.18.2
+ version: 4.19.1
+ glob:
+ specifier: ^10.3.10
+ version: 10.3.10
+ loader.js:
+ specifier: ^4.7.0
+ version: 4.7.0
+ morgan:
+ specifier: ^1.10.0
+ version: 1.10.0
+ qunit:
+ specifier: 2.19.4
+ version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ qunit-console-grouper:
+ specifier: ^0.3.0
+ version: 0.3.0
+ qunit-dom:
+ specifier: ^3.0.0
+ version: 3.0.0
+ silent-error:
+ specifier: ^1.1.1
+ version: 1.1.1
+ typescript:
+ specifier: ^5.3.3
+ version: 5.4.3
+ webpack:
+ specifier: ^5.89.0
+ version: 5.91.0
+ dependenciesMeta:
+ '@ember-data/debug':
+ injected: true
+ '@ember-data/graph':
+ injected: true
+ '@ember-data/json-api':
+ injected: true
+ '@ember-data/legacy-compat':
+ injected: true
+ '@ember-data/model':
+ injected: true
+ '@ember-data/private-build-infra':
+ injected: true
+ '@ember-data/request':
+ injected: true
+ '@ember-data/request-utils':
+ injected: true
+ '@ember-data/store':
+ injected: true
+ '@ember-data/tracking':
+ injected: true
+ '@ember-data/unpublished-test-infra':
+ injected: true
+ '@ember/string':
+ injected: true
+ '@warp-drive/core-types':
+ injected: true
+ ember-data:
+ injected: true
+ ember-inflector:
+ injected: true
+
tests/main:
dependencies:
pnpm-sync-dependencies-meta-injected:
@@ -4293,7 +4499,7 @@ importers:
version: 3.0.0
express:
specifier: ^4.18.3
- version: 4.18.3
+ version: 4.19.1
glob:
specifier: ^10.3.10
version: 10.3.10
@@ -4416,10 +4622,10 @@ importers:
version: 1.1.2
'@glint/environment-ember-loose':
specifier: ^1.3.0
- version: 1.3.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
+ version: 1.4.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
'@glint/environment-ember-template-imports':
specifier: ^1.3.0
- version: 1.3.0(@glint/environment-ember-loose@1.3.0)(@glint/template@1.4.0)
+ version: 1.4.0(@glint/environment-ember-loose@1.4.0)(@glint/template@1.4.0)
'@glint/template':
specifier: ^1.4.0
version: 1.4.0
@@ -4900,8 +5106,8 @@ packages:
dependencies:
'@babel/types': 7.24.0
- /@babel/helper-module-imports@7.24.1:
- resolution: {integrity: sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og==}
+ /@babel/helper-module-imports@7.24.3:
+ resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
@@ -4914,7 +5120,7 @@ packages:
dependencies:
'@babel/core': 7.24.3(supports-color@8.1.1)
'@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
@@ -5287,8 +5493,8 @@ packages:
'@babel/core': 7.24.3(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.24.0
- /@babel/plugin-transform-async-generator-functions@7.24.1(@babel/core@7.24.3):
- resolution: {integrity: sha512-OTkLJM0OtmzcpOgF7MREERUCdCnCBtBsq3vVFbuq/RKMK0/jdYqdMexWi3zNs7Nzd95ase65MbTGrpFJflOb6A==}
+ /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.3):
+ resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -5306,7 +5512,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.24.3(supports-color@8.1.1)
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@babel/helper-plugin-utils': 7.24.0
'@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.3)
@@ -5676,17 +5882,17 @@ packages:
'@babel/core': 7.24.3(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.24.0
- /@babel/plugin-transform-runtime@7.24.1(@babel/core@7.24.3):
- resolution: {integrity: sha512-yHLX14/T+tO0gjgJroDb8JYjOcQuzVC+Brt4CjHAxq/Ghw4xBVG+N02d1rMEcyUnKUQBL4Yy2gA9R72GK961jQ==}
+ /@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.3):
+ resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.24.3(supports-color@8.1.1)
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@babel/helper-plugin-utils': 7.24.0
babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.3)
- babel-plugin-polyfill-corejs3: 0.10.1(@babel/core@7.24.3)
+ babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.3)
babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.3)
semver: 6.3.1
transitivePeerDependencies:
@@ -5789,8 +5995,8 @@ packages:
'@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.3)
'@babel/helper-plugin-utils': 7.24.0
- /@babel/preset-env@7.24.1(@babel/core@7.24.3):
- resolution: {integrity: sha512-CwCMz1Z28UHLI2iE+cbnWT2epPMV9bzzoBGM6A3mOS22VQd/1TPoWItV7S7iL9TkPmPEf5L/QzurmztyyDN9FA==}
+ /@babel/preset-env@7.24.3(@babel/core@7.24.3):
+ resolution: {integrity: sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -5823,7 +6029,7 @@ packages:
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.3)
'@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.3)
'@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.3)
- '@babel/plugin-transform-async-generator-functions': 7.24.1(@babel/core@7.24.3)
+ '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-block-scoping': 7.24.1(@babel/core@7.24.3)
@@ -5872,7 +6078,7 @@ packages:
'@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.3)
'@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.3)
babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.3)
- babel-plugin-polyfill-corejs3: 0.10.1(@babel/core@7.24.3)
+ babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.3)
babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.3)
core-js-compat: 3.36.1
semver: 6.3.1
@@ -5930,7 +6136,7 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.24.2
- '@babel/generator': 7.24.1
+ '@babel/generator': 7.23.6
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
@@ -6041,6 +6247,30 @@ packages:
- webpack
patched: true
+ /@ember/test-helpers@3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(ember-source@5.6.0)(webpack@5.91.0):
+ resolution: {integrity: sha512-HEI28wtjnQuEj9+DstHUEEKPtqPAEVN9AAVr4EifVCd3DyEDy0m6hFT4qbap1WxAIktLja2QXGJg50lVWzZc5g==}
+ engines: {node: 16.* || >= 18}
+ peerDependencies:
+ ember-source: '*'
+ dependencies:
+ '@ember/test-waiters': 3.1.0(@babel/core@7.24.3)
+ '@embroider/macros': 1.15.0(@glint/template@1.4.0)
+ '@simple-dom/interface': 1.4.0
+ broccoli-debug: 0.6.5
+ broccoli-funnel: 3.0.8
+ dom-element-descriptors: 0.5.0
+ ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-cli-htmlbars: 6.3.0
+ ember-source: 5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@glint/template'
+ - supports-color
+ - webpack
+ dev: true
+ patched: true
+
/@ember/test-helpers@3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(ember-source@5.7.0):
resolution: {integrity: sha512-HEI28wtjnQuEj9+DstHUEEKPtqPAEVN9AAVr4EifVCd3DyEDy0m6hFT4qbap1WxAIktLja2QXGJg50lVWzZc5g==}
engines: {node: 16.* || >= 18}
@@ -6134,8 +6364,8 @@ packages:
'@babel/code-frame': 7.24.2
'@babel/core': 7.24.3(supports-color@8.1.1)
'@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.3)
- '@babel/plugin-transform-runtime': 7.24.1(@babel/core@7.24.3)
- '@babel/preset-env': 7.24.1(@babel/core@7.24.3)
+ '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.3)
+ '@babel/preset-env': 7.24.3(@babel/core@7.24.3)
'@babel/runtime': 7.24.1
'@babel/traverse': 7.24.1(supports-color@8.1.1)
'@embroider/core': 3.4.6(@glint/template@1.4.0)
@@ -6198,7 +6428,7 @@ packages:
broccoli-source: 3.0.1
debug: 4.3.4(supports-color@8.1.1)
fast-sourcemap-concat: 1.4.0
- filesize: 10.1.0
+ filesize: 10.1.1
fs-extra: 9.1.0
fs-tree-diff: 2.0.1
handlebars: 4.7.8
@@ -6346,6 +6576,17 @@ packages:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
dev: true
+ /@glimmer/compiler@0.85.13:
+ resolution: {integrity: sha512-To8a+yScHAHE9/PpwuHyz2yYTBM2+m1Z6l4B9A6LgjkKeu0K7plv2c03V9JpsA3mMJBROJ1mfxOUuQsvTidEkg==}
+ engines: {node: '>= 16.0.0'}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/syntax': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/vm': 0.85.13
+ '@glimmer/wire-format': 0.85.13
+ dev: true
+
/@glimmer/compiler@0.87.1:
resolution: {integrity: sha512-7qXrOv55cH/YW+Vs4dFkNJsNXAW/jP+7kZLhKcH8wCduPfBCQxb9HNh1lBESuFej2rCks6h9I1qXeZHkc/oWxQ==}
engines: {node: '>= 16.0.0'}
@@ -6378,6 +6619,14 @@ packages:
- '@babel/core'
- supports-color
+ /@glimmer/debug@0.85.13:
+ resolution: {integrity: sha512-BguKA6RXbCskyRHfJn+Tm/z0aBwefgYQ4RFz/0lVqYB3lJz8Oo02SDrtHQTwBMC9x/nF9GVA//60R4P47aryWg==}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/vm': 0.85.13
+ dev: true
+
/@glimmer/debug@0.87.1:
resolution: {integrity: sha512-rja9/Hofv1NEjIqp8P2eQuHY3+orlS3BL4fbFyvrE+Pw4lRwQPLm6UdgCMHZGGe9yweZAGvNVH6CimDBq7biwA==}
dependencies:
@@ -6385,6 +6634,15 @@ packages:
'@glimmer/util': 0.87.1
'@glimmer/vm': 0.87.1
+ /@glimmer/destroyable@0.85.13:
+ resolution: {integrity: sha512-fE3bhjDAzYsYQ+rm1qlu+6kP8f0CClHYynp1CWhskDc+qM0Jt7Up08htZK8/Ttaw7RXgi43Fe7FrQtOMUlrVlg==}
+ dependencies:
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ dev: true
+
/@glimmer/destroyable@0.87.1:
resolution: {integrity: sha512-v9kdMq/FCSMcXK4gIKxPCSEcYXjDAnapKVY2o9fCgqky+mbpd0XuGoxaXa35nFwDk69L/9/8B3vXQOpa6ThikA==}
dependencies:
@@ -6396,6 +6654,13 @@ packages:
/@glimmer/di@0.1.11:
resolution: {integrity: sha512-moRwafNDwHTnTHzyyZC9D+mUSvYrs1Ak0tRPjjmCghdoHHIvMshVbEnwKb/1WmW5CUlKc2eL9rlAV32n3GiItg==}
+ /@glimmer/encoder@0.85.13:
+ resolution: {integrity: sha512-GukVAeHxDAucbiExjl8lV8BYQXTkV2Co8IXnX5vKaomcZ+fwudGmvzbo2myq+WZ1llqnkZ45DVcqa9BVh9eNWg==}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/vm': 0.85.13
+ dev: true
+
/@glimmer/encoder@0.87.1:
resolution: {integrity: sha512-5oZEkdtYcAbkiWuXFQ8ofSEGH5uzqi86WK9/IXb7Qn4t6o7ixadWk8nhtORRpVS1u4FpAjhsAysnzRFoNqJwbQ==}
dependencies:
@@ -6405,6 +6670,10 @@ packages:
/@glimmer/env@0.1.7:
resolution: {integrity: sha512-JKF/a9I9jw6fGoz8kA7LEQslrwJ5jms5CXhu/aqkBWk+PmZ6pTl8mlb/eJ/5ujBGTiQzBhy5AIWF712iA+4/mw==}
+ /@glimmer/global-context@0.85.13:
+ resolution: {integrity: sha512-JY/TQ+9dyukQVuTwKlF3jVXaWUwxx676KtclYf6SphtJQu2/mysxqj9XIAowOahhi9m7E7hzHkxAl9bm2FXXjQ==}
+ dev: true
+
/@glimmer/global-context@0.87.1:
resolution: {integrity: sha512-Mitr7pBeVDTplFWlohyzxWLpFll7ffMZN+fnkBmUj8HiDLbD790Lb8lR9B2nL3t4RGnh6W9kDkCnZB+hvDm/eQ==}
@@ -6416,6 +6685,12 @@ packages:
dependencies:
'@simple-dom/interface': 1.4.0
+ /@glimmer/interfaces@0.85.13:
+ resolution: {integrity: sha512-qOEdvFgCQX1g+Gfi/nA2zbKYPmEkEbhFgzZ5esgmlQNOSQx4j8nyGiBvnG/vepHrh4wUzTvIynrCQpfr3SiKXg==}
+ dependencies:
+ '@simple-dom/interface': 1.4.0
+ dev: true
+
/@glimmer/interfaces@0.87.1:
resolution: {integrity: sha512-2lbwLY4Bt9i2SvwT4hhY0TgEYKhOMQBgYvRiraq2BYHwO8iLKh3lC8iO3d+rQ3VgDtQ9i/sP6HG848VNRyVHxA==}
dependencies:
@@ -6431,6 +6706,20 @@ packages:
dependencies:
'@simple-dom/interface': 1.4.0
+ /@glimmer/manager@0.85.13:
+ resolution: {integrity: sha512-HwJoD9qAVPQ6hHNMUFTvQtJi5NIO1JzOT0kauyln754G6ggT07IFmi+b1R4WeJJJndZpuR3Ad4PS4usRnI89Zw==}
+ dependencies:
+ '@glimmer/debug': 0.85.13
+ '@glimmer/destroyable': 0.85.13
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/reference': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/validator': 0.89.0
+ '@glimmer/vm': 0.85.13
+ dev: true
+
/@glimmer/manager@0.87.1:
resolution: {integrity: sha512-jEUZZQWcuxKg+Ri/A1HGURm9pBrx13JDHx1djYCnPo96yjtQFYxEG0VcwLq2EtAEpFrekwfO1b6m3JZiFqmtGg==}
dependencies:
@@ -6444,6 +6733,15 @@ packages:
'@glimmer/validator': 0.89.0
'@glimmer/vm': 0.87.1
+ /@glimmer/node@0.85.13:
+ resolution: {integrity: sha512-Lb/0zPoucm8hQ/qd6A8RYgdoLSC5tulZJ7LahAq1/bpG42vJyQMGYBjxVL2ffQv+Yxao/nEQxUP5ssoLXS+gvw==}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/runtime': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@simple-dom/document': 1.4.0
+ dev: true
+
/@glimmer/node@0.87.1:
resolution: {integrity: sha512-peESyArA08Va9f3gpBnhO+RNkK4Oe0Q8sMPQILCloAukNe2+DQOhTvDgVjRUKmVXMJCWoSgmJtxkiB3ZE193vw==}
dependencies:
@@ -6452,6 +6750,21 @@ packages:
'@glimmer/util': 0.87.1
'@simple-dom/document': 1.4.0
+ /@glimmer/opcode-compiler@0.85.13:
+ resolution: {integrity: sha512-EySW/IsMoO+lWW2TC31zsHqanST/5lTGoZOrB9zy7FmiUaPGD0RxeOEBU8rTRHzYxNzoJAsX7l3Hv6Y0y2ABZg==}
+ dependencies:
+ '@glimmer/debug': 0.85.13
+ '@glimmer/encoder': 0.85.13
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/manager': 0.85.13
+ '@glimmer/reference': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/vm': 0.85.13
+ '@glimmer/wire-format': 0.85.13
+ dev: true
+
/@glimmer/opcode-compiler@0.87.1:
resolution: {integrity: sha512-D9OFrH3CrGNXfGtgcVWvu3xofpQZPoYFkqj3RrcDwnsSIYPSqUYTIOO6dwpxTbPlzkASidq0B2htXK7WkCERVw==}
dependencies:
@@ -6466,11 +6779,30 @@ packages:
'@glimmer/vm': 0.87.1
'@glimmer/wire-format': 0.87.1
+ /@glimmer/owner@0.85.13:
+ resolution: {integrity: sha512-4FhMR9qHuKu7sZIIsulqBvzP9UWYFtjxzF+eQ5cxmr+0uxjJN8/rZbRG8vPbJs3OoV2k+vHj4BYhLyflSjRaZw==}
+ dependencies:
+ '@glimmer/util': 0.85.13
+ dev: true
+
/@glimmer/owner@0.87.1:
resolution: {integrity: sha512-ayYjznPMSGpgygNT7XlTXeel6Cl/fafm4WJeRRgdPxG1EZMjKPlfpfAyNzf9peEIlW3WMbPu3RAIYrf54aThWQ==}
dependencies:
'@glimmer/util': 0.87.1
+ /@glimmer/program@0.85.13:
+ resolution: {integrity: sha512-E+89jmD+52fB2/HqeOW2vim1x8wNTkpfPpzsGeVFlyZHxBaMR95zw1+rgl2aE1pyRoZR3csL4qSBaJb26Sp6Pw==}
+ dependencies:
+ '@glimmer/encoder': 0.85.13
+ '@glimmer/env': 0.1.7
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/manager': 0.85.13
+ '@glimmer/opcode-compiler': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/vm': 0.85.13
+ '@glimmer/wire-format': 0.85.13
+ dev: true
+
/@glimmer/program@0.87.1:
resolution: {integrity: sha512-+r1Dz5Da0zyYwBhPmqoXiw3qmDamqqhVmSCtJLLcZ6exXXC2ZjGoNdynfos80A91dx+PFqYgHg+5lfa5STT9iQ==}
dependencies:
@@ -6483,6 +6815,16 @@ packages:
'@glimmer/vm': 0.87.1
'@glimmer/wire-format': 0.87.1
+ /@glimmer/reference@0.85.13:
+ resolution: {integrity: sha512-rkMlY6RUkwZwfO7fQodKQw5WOLCKNZPkVAloaVJSqpyKjHRNjMaD3TZhfNmlGIVdNgVRRsOWSWdTL5CUUzDlwQ==}
+ dependencies:
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/validator': 0.89.0
+ dev: true
+
/@glimmer/reference@0.87.1:
resolution: {integrity: sha512-KJwKYDnds6amsmVB1YxmFhJGI/TNCNmsFBWKUH8K0odmiggUCjt3AwUoOKztkwh3xxy/jpq+5AahIuV+uBgW7A==}
dependencies:
@@ -6492,6 +6834,23 @@ packages:
'@glimmer/util': 0.87.1
'@glimmer/validator': 0.89.0
+ /@glimmer/runtime@0.85.13:
+ resolution: {integrity: sha512-jum5u2mX0WOAAF3L0pVZ/AOAMjJRKfGIqcStUYldmnf/xCFucKsh2WzSBS5KxlHDt4OGs00GflkpoTZkqPnCmg==}
+ dependencies:
+ '@glimmer/destroyable': 0.85.13
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/manager': 0.85.13
+ '@glimmer/owner': 0.85.13
+ '@glimmer/program': 0.85.13
+ '@glimmer/reference': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/validator': 0.89.0
+ '@glimmer/vm': 0.85.13
+ '@glimmer/wire-format': 0.85.13
+ dev: true
+
/@glimmer/runtime@0.87.1:
resolution: {integrity: sha512-7QBONxRFesnHzelCiUahZjRj3nhbUxPg0F+iD+3rALrXaWfB1pkhngMTK2DYEmsJ7kq04qVzwBnTSrqsmLzOTg==}
dependencies:
@@ -6517,6 +6876,17 @@ packages:
'@handlebars/parser': 2.0.0
simple-html-tokenizer: 0.5.11
+ /@glimmer/syntax@0.85.13:
+ resolution: {integrity: sha512-zMGkJh6JcHdCTx1emmBbhBrGO04gqD6CS5khmDwSJCIpVHnGH0Ejxp9rpnSMc5IW71/hFoQY6RlMgVYF2hrHhA==}
+ dependencies:
+ '@glimmer/env': 0.1.7
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/wire-format': 0.85.13
+ '@handlebars/parser': 2.0.0
+ simple-html-tokenizer: 0.5.11
+ dev: true
+
/@glimmer/syntax@0.87.1:
resolution: {integrity: sha512-zYzZT6LgpSF0iv5iuxmMV5Pf52aE8dukNC2KfrHC6gXJfM4eLZMZcyk76NW5m+SEetZSOXX6AWv/KwLnoxiMfQ==}
dependencies:
@@ -6553,6 +6923,13 @@ packages:
'@glimmer/interfaces': 0.84.3
'@simple-dom/interface': 1.4.0
+ /@glimmer/util@0.85.13:
+ resolution: {integrity: sha512-ogj65iukNKEPPqQ2bOD6CLsqxsFwmiGvTQbAsg1eh1MoPjxhNZMpLsT5CdQ10XE7yUALHGJ71SwxBSpAOGDmxg==}
+ dependencies:
+ '@glimmer/env': 0.1.7
+ '@glimmer/interfaces': 0.85.13
+ dev: true
+
/@glimmer/util@0.87.1:
resolution: {integrity: sha512-Duxi2JutaIewfIWp8PJl7U5n12yasKWtZFHNLSrg+C8TKeMXdRyJtI7uqtqg0Z/6F9JwdJe/IPhTvdsTTfzAuA==}
dependencies:
@@ -6579,6 +6956,15 @@ packages:
'@glimmer/interfaces': 0.89.0
'@glimmer/util': 0.89.0
+ /@glimmer/vm-babel-plugins@0.85.13(@babel/core@7.24.3):
+ resolution: {integrity: sha512-B5R+t7o0Dlfz7GYu6liQ/GERAq/Fb775KZJeEaIwX2odJDKyIfOU+m/bLHpoVevY4V/x+qB8tVCA4Nv5LXu3Kg==}
+ engines: {node: '>=16'}
+ dependencies:
+ babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.3)
+ transitivePeerDependencies:
+ - '@babel/core'
+ dev: true
+
/@glimmer/vm-babel-plugins@0.87.1(@babel/core@7.24.3):
resolution: {integrity: sha512-VbhYHa+HfGFiTIOOkvFuYPwBTaDvWTAR1Q55RI25JI6Nno0duBLB3UVRTDgHM+iOfbgRN7OSR5XCe/C5X5C5LA==}
engines: {node: '>=16'}
@@ -6587,12 +6973,26 @@ packages:
transitivePeerDependencies:
- '@babel/core'
+ /@glimmer/vm@0.85.13:
+ resolution: {integrity: sha512-x/FwTAFnoIzu/TzJYuqWI1rWoIJUthKZ6n37q5Nr8TVoFqOVXk7q9k53etcAhxLEwBjX/cox6i1FxCuv5vpc8Q==}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ dev: true
+
/@glimmer/vm@0.87.1:
resolution: {integrity: sha512-JSFr85ASZmuN4H72px7GHtnW79PPRHpqHw6O/6UUZd+ocwWHy+nG9JGbo8kntvqN5xP0SdCipjv/c0u7nkc8tg==}
dependencies:
'@glimmer/interfaces': 0.87.1
'@glimmer/util': 0.87.1
+ /@glimmer/wire-format@0.85.13:
+ resolution: {integrity: sha512-q6bHPfjSYE9jH27L75lUzyhSpBA+iONzsJVXewdwO4GdYYCC4s+pfUaJg7ZYNFDcHDuVKUcLhBb/NICDzMA5Uw==}
+ dependencies:
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/util': 0.85.13
+ dev: true
+
/@glimmer/wire-format@0.87.1:
resolution: {integrity: sha512-O3W1HDfRGX7wHZqvP8UzI/nWyZ2GIMFolU7l6WcLGU9HIdzqfxsc7ae2Icob/fq2kV9meHti4yDEdTMlBVK9AQ==}
dependencies:
@@ -6605,8 +7005,8 @@ packages:
'@glimmer/interfaces': 0.88.1
'@glimmer/util': 0.88.1
- /@glint/core@1.3.0(typescript@5.4.3):
- resolution: {integrity: sha512-R5Y1QmkZs6lJHQ0LTRRcTKDI1EdeM32YuR2J67LG4qKT+WUNZhmetkqPiAMW9hQAOdrG/PqDZWV+J7Jf3xOlAg==}
+ /@glint/core@1.4.0(typescript@5.4.3):
+ resolution: {integrity: sha512-nq27a/1R6kc3lsuciz8z9IZO1NQCbNkEBxf5KJI7AUrnps6RzQzmq3pmwO24zQYmFcH4sqpod8fleNIpg8YEqg==}
hasBin: true
peerDependencies:
typescript: '*'
@@ -6625,8 +7025,8 @@ packages:
- supports-color
dev: true
- /@glint/environment-ember-loose@1.3.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0):
- resolution: {integrity: sha512-kURIttax2zG1oYniJ4bd3rhJRuP588Ld4YAG5EFzjg4s01oLQKpfNskxwSwox07PUkygm2D+9v3Foo2TlYJSSg==}
+ /@glint/environment-ember-loose@1.4.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0):
+ resolution: {integrity: sha512-vFR3qgPTisGzS36e04195wTUrtUc6GuVwm6hsC/XXx6PeRw/6rtMxhK08Aw/VtDc00UqQzM9sIEghPVKHwqVVQ==}
peerDependencies:
'@glimmer/component': ^1.1.2
'@glint/template': ^1.4.0
@@ -6658,10 +7058,10 @@ packages:
ember-cli-htmlbars: 6.3.0
dev: true
- /@glint/environment-ember-template-imports@1.3.0(@glint/environment-ember-loose@1.3.0)(@glint/template@1.4.0):
- resolution: {integrity: sha512-ynSc3AeFE4ZocvjI4rTS55L5sSrMexMvRtOYbVuY/u9t0PGXDjFuH/OiRiSCbHIL/jYH5Ie5uASZxs7TTCT8dw==}
+ /@glint/environment-ember-template-imports@1.4.0(@glint/environment-ember-loose@1.4.0)(@glint/template@1.4.0):
+ resolution: {integrity: sha512-VXcUgea92l7NFShU26rpQn+hYUZ7ex/rNtU9vnw2BAVZaPfxZROokW8ABj8aMaCUDe60CoMVZ1/QSeONSCln3w==}
peerDependencies:
- '@glint/environment-ember-loose': ^1.3.0
+ '@glint/environment-ember-loose': ^1.4.0
'@glint/template': ^1.4.0
'@types/ember__component': ^4.0.10
'@types/ember__helper': ^4.0.1
@@ -6677,11 +7077,9 @@ packages:
'@types/ember__routing':
optional: true
dependencies:
- '@glint/environment-ember-loose': 1.3.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
+ '@glint/environment-ember-loose': 1.4.0(@glimmer/component@1.1.2)(@glint/template@1.4.0)(ember-cli-htmlbars@6.3.0)
'@glint/template': 1.4.0
- ember-template-imports: 3.4.2
- transitivePeerDependencies:
- - supports-color
+ content-tag: 2.0.1
dev: true
/@glint/template@1.4.0:
@@ -7307,7 +7705,7 @@ packages:
optional: true
dependencies:
'@babel/core': 7.24.3(supports-color@8.1.1)
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@rollup/pluginutils': 5.1.0(rollup@4.13.0)
rollup: 4.13.0
dev: true
@@ -7536,10 +7934,10 @@ packages:
/@types/chai-as-promised@7.1.8:
resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==}
dependencies:
- '@types/chai': 4.3.13
+ '@types/chai': 4.3.14
- /@types/chai@4.3.13:
- resolution: {integrity: sha512-+LxQEbg4BDUf88utmhpUpTyYn1zHao443aGnXIAQak9ZMt9Rtsic0Oig0OS1xyIqdDXc5uMekoC6NaiUlkT/qA==}
+ /@types/chai@4.3.14:
+ resolution: {integrity: sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==}
/@types/connect@3.4.38:
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
@@ -7573,7 +7971,7 @@ packages:
resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==}
dependencies:
'@types/node': 20.11.30
- '@types/qs': 6.9.13
+ '@types/qs': 6.9.14
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -7582,7 +7980,7 @@ packages:
dependencies:
'@types/body-parser': 1.19.5
'@types/express-serve-static-core': 4.17.43
- '@types/qs': 6.9.13
+ '@types/qs': 6.9.14
'@types/serve-static': 1.15.5
/@types/fs-extra@8.1.5:
@@ -7647,8 +8045,8 @@ packages:
dependencies:
undici-types: 5.26.5
- /@types/qs@6.9.13:
- resolution: {integrity: sha512-iLR+1vTTJ3p0QaOUq6ACbY1mzKTODFDT/XedZI8BksOotFmL4ForwDfRQ/DZeuTHR7/2i4lI1D203gdfxuqTlA==}
+ /@types/qs@6.9.14:
+ resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==}
/@types/qunit@2.19.10:
resolution: {integrity: sha512-gVB+rxvxmbyPFWa6yjjKgcumWal3hyqoTXI0Oil161uWfo1OCzWZ/rnEumsx+6uVgrwPrCrhpQbLkzfildkSbg==}
@@ -8270,15 +8668,16 @@ packages:
resolution: {integrity: sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==}
/array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+ resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
- /array-includes@3.1.7:
- resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
+ /array-includes@3.1.8:
+ resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
get-intrinsic: 1.2.4
is-string: 1.0.7
dev: false
@@ -8585,11 +8984,6 @@ packages:
- supports-color
dev: true
- /babel-import-util@0.2.0:
- resolution: {integrity: sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag==}
- engines: {node: '>= 12.*'}
- dev: true
-
/babel-import-util@1.4.1:
resolution: {integrity: sha512-TNdiTQdPhXlx02pzG//UyVPSKE7SNWjY0n4So/ZnjQpWwaM5LvWBLkWa1JKll5u06HNscHD91XZPuwrMg1kadQ==}
engines: {node: '>= 12.*'}
@@ -8696,7 +9090,7 @@ packages:
line-column: 1.0.2
magic-string: 0.25.9
parse-static-imports: 1.1.0
- string.prototype.matchall: 4.0.10
+ string.prototype.matchall: 4.0.11
/babel-plugin-module-resolver@5.0.0:
resolution: {integrity: sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q==}
@@ -8720,8 +9114,8 @@ packages:
transitivePeerDependencies:
- supports-color
- /babel-plugin-polyfill-corejs3@0.10.1(@babel/core@7.24.3):
- resolution: {integrity: sha512-XiFei6VGwM4ii6nKC1VCenGD8Z4bjiNYcrdkM8oqM3pbuemmyb8biMgrDX1ZHSbIuMLXatM6JJ/StPYIuTl6MQ==}
+ /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.3):
+ resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
@@ -9707,7 +10101,7 @@ packages:
resolution: {integrity: sha512-sWi3b3fTUSVPDsz5KsQ5eCQNVAtLgkIE/HYFkEZXR/07clqmd4E/gFiuwSaqa9b+QTXc1Uemfb7TVWbEIURWDg==}
engines: {node: 8.* || >= 10.*}
dependencies:
- '@types/chai': 4.3.13
+ '@types/chai': 4.3.14
'@types/chai-as-promised': 7.1.8
'@types/express': 4.17.21
ansi-html: 0.0.7
@@ -9746,8 +10140,8 @@ packages:
resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001599
- electron-to-chromium: 1.4.711
+ caniuse-lite: 1.0.30001600
+ electron-to-chromium: 1.4.715
dev: true
/browserslist@4.23.0:
@@ -9755,8 +10149,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001599
- electron-to-chromium: 1.4.711
+ caniuse-lite: 1.0.30001600
+ electron-to-chromium: 1.4.715
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
@@ -9821,7 +10215,7 @@ packages:
promise-inflight: 1.0.1
rimraf: 3.0.2
ssri: 8.0.1
- tar: 6.2.0
+ tar: 6.2.1
unique-filename: 1.1.1
transitivePeerDependencies:
- bluebird
@@ -9902,8 +10296,8 @@ packages:
dependencies:
path-temp: 2.1.0
- /caniuse-lite@1.0.30001599:
- resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==}
+ /caniuse-lite@1.0.30001600:
+ resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==}
/capture-exit@2.0.0:
resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==}
@@ -10133,8 +10527,8 @@ packages:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
- /cli-table3@0.6.3:
- resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==}
+ /cli-table3@0.6.4:
+ resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==}
engines: {node: 10.* || >= 12.*}
dependencies:
string-width: 4.2.3
@@ -10315,7 +10709,7 @@ packages:
- supports-color
/concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
/config-chain@1.1.13:
resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
@@ -10562,14 +10956,14 @@ packages:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
/cookie-signature@1.0.6:
- resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
/cookie@0.4.2:
resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
engines: {node: '>= 0.6'}
- /cookie@0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ /cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
/copy-descriptor@0.1.1:
@@ -10647,13 +11041,13 @@ packages:
webpack:
optional: true
dependencies:
- icss-utils: 5.1.0(postcss@8.4.37)
+ icss-utils: 5.1.0(postcss@8.4.38)
loader-utils: 2.0.4
- postcss: 8.4.37
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.37)
- postcss-modules-local-by-default: 4.0.4(postcss@8.4.37)
- postcss-modules-scope: 3.1.1(postcss@8.4.37)
- postcss-modules-values: 4.0.0(postcss@8.4.37)
+ postcss: 8.4.38
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.38)
+ postcss-modules-local-by-default: 4.0.4(postcss@8.4.38)
+ postcss-modules-scope: 3.1.1(postcss@8.4.38)
+ postcss-modules-values: 4.0.0(postcss@8.4.38)
postcss-value-parser: 4.2.0
schema-utils: 3.3.0
semver: 7.6.0
@@ -11049,10 +11443,10 @@ packages:
semver: 6.3.1
/ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+ resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
- /electron-to-chromium@1.4.711:
- resolution: {integrity: sha512-hRg81qzvUEibX2lDxnFlVCHACa+LtrCPIsWAxo161LDYIB3jauf57RGsMZV9mvGwE98yGH06icj3zBEoOkxd/w==}
+ /electron-to-chromium@1.4.715:
+ resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==}
/ember-auto-import@2.7.2(@glint/template@1.4.0):
resolution: {integrity: sha512-pkWIljmJClYL17YBk8FjO7NrZPQoY9v0b+FooJvaHf/xlDQIBYVP7OaDHbNuNbpj7+wAwSDAnnwxjCoLsmm4cw==}
@@ -11063,7 +11457,7 @@ packages:
'@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.3)
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.3)
'@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.3)
- '@babel/preset-env': 7.24.1(@babel/core@7.24.3)
+ '@babel/preset-env': 7.24.3(@babel/core@7.24.3)
'@embroider/macros': 1.15.0(@glint/template@1.4.0)
'@embroider/shared-internals': 2.5.2(supports-color@8.1.1)
babel-loader: 8.3.0(@babel/core@7.24.3)(webpack@5.91.0)
@@ -11107,7 +11501,7 @@ packages:
'@babel/plugin-proposal-decorators': 7.24.1(@babel/core@7.24.3)
'@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.24.3)
'@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.3)
- '@babel/preset-env': 7.24.1(@babel/core@7.24.3)
+ '@babel/preset-env': 7.24.3(@babel/core@7.24.3)
'@embroider/macros': 1.15.0(@glint/template@1.4.0)
'@embroider/shared-internals': 2.5.2(supports-color@8.1.1)
babel-loader: 8.3.0(@babel/core@7.24.3)(webpack@5.91.0)
@@ -11191,9 +11585,9 @@ packages:
'@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.24.3)
'@babel/plugin-transform-class-static-block': 7.24.1(@babel/core@7.24.3)
'@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.3)
- '@babel/plugin-transform-runtime': 7.24.1(@babel/core@7.24.3)
+ '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.3)
'@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3)
- '@babel/preset-env': 7.24.1(@babel/core@7.24.3)
+ '@babel/preset-env': 7.24.3(@babel/core@7.24.3)
'@babel/runtime': 7.12.18
amd-name-resolver: 1.3.1
babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.3)
@@ -11214,6 +11608,25 @@ packages:
transitivePeerDependencies:
- supports-color
+ /ember-cli-blueprint-test-helpers@0.19.2(ember-cli@5.4.1):
+ resolution: {integrity: sha512-otCKdGcNFK0+MkQo+LLjYbRD9EerApH6Z/odvvlL1hxrN+owHMV5E+jI2rbtdvNEH0/6w5ZqjH4kS232fvtCxQ==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+ peerDependencies:
+ ember-cli: '*'
+ dependencies:
+ chai: 4.4.1
+ chai-as-promised: 7.1.1(chai@4.4.1)
+ chai-files: 1.4.0
+ debug: 4.3.4(supports-color@8.1.1)
+ ember-cli: 5.4.1
+ ember-cli-internal-test-helpers: 0.9.1
+ fs-extra: 7.0.1
+ testdouble: 3.20.2
+ tmp-sync: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/ember-cli-blueprint-test-helpers@0.19.2(ember-cli@5.7.0):
resolution: {integrity: sha512-otCKdGcNFK0+MkQo+LLjYbRD9EerApH6Z/odvvlL1hxrN+owHMV5E+jI2rbtdvNEH0/6w5ZqjH4kS232fvtCxQ==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -11227,11 +11640,27 @@ packages:
ember-cli: 5.7.0
ember-cli-internal-test-helpers: 0.9.1
fs-extra: 7.0.1
- testdouble: 3.20.1
+ testdouble: 3.20.2
tmp-sync: 1.1.2
transitivePeerDependencies:
- supports-color
+ /ember-cli-dependency-checker@3.3.2(ember-cli@5.4.1):
+ resolution: {integrity: sha512-PwkrW5oYsdPWwt+0Tojufmv/hxVETTjkrEdK7ANQB2VSnqpA5UcYubwpQM9ONuR2J8wyNDMwEHlqIrk/FYtBsQ==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ ember-cli: ^3.2.0 || >=4.0.0
+ dependencies:
+ chalk: 2.4.2
+ ember-cli: 5.4.1
+ find-yarn-workspace-root: 1.2.1
+ is-git-url: 1.0.0
+ resolve: 1.22.8
+ semver: 5.7.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/ember-cli-dependency-checker@3.3.2(ember-cli@5.7.0):
resolution: {integrity: sha512-PwkrW5oYsdPWwt+0Tojufmv/hxVETTjkrEdK7ANQB2VSnqpA5UcYubwpQM9ONuR2J8wyNDMwEHlqIrk/FYtBsQ==}
engines: {node: '>= 6'}
@@ -11477,6 +11906,153 @@ packages:
transitivePeerDependencies:
- supports-color
+ /ember-cli@5.4.1:
+ resolution: {integrity: sha512-+jwp63OPT0zkUnXP563DkIwb1GiI6kGYHg6DyzJKY48BCdevqcgxsMFn8/RENXoF7krg18A5B9cSa8Y1v15tIw==}
+ engines: {node: '>= 18'}
+ hasBin: true
+ dependencies:
+ '@pnpm/find-workspace-dir': 6.0.3
+ broccoli: 3.5.2
+ broccoli-builder: 0.18.14
+ broccoli-concat: 4.2.5
+ broccoli-config-loader: 1.0.1
+ broccoli-config-replace: 1.1.2
+ broccoli-debug: 0.6.5
+ broccoli-funnel: 3.0.8
+ broccoli-funnel-reducer: 1.0.0
+ broccoli-merge-trees: 4.2.0
+ broccoli-middleware: 2.1.1
+ broccoli-slow-trees: 3.1.0
+ broccoli-source: 3.0.1
+ broccoli-stew: 3.0.0
+ calculate-cache-key-for-tree: 2.0.0
+ capture-exit: 2.0.0
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ clean-base-url: 1.0.0
+ compression: 1.7.4
+ configstore: 5.0.1
+ console-ui: 3.1.2
+ core-object: 3.1.5
+ dag-map: 2.0.2
+ diff: 5.2.0
+ ember-cli-is-package-missing: 1.0.0
+ ember-cli-lodash-subset: 2.0.1
+ ember-cli-normalize-entity-name: 1.0.0
+ ember-cli-preprocess-registry: 5.0.1
+ ember-cli-string-utils: 1.1.0
+ ensure-posix-path: 1.1.1
+ execa: 5.1.1
+ exit: 0.1.2
+ express: 4.19.1
+ filesize: 10.1.1
+ find-up: 5.0.0
+ find-yarn-workspace-root: 2.0.0
+ fixturify-project: 2.1.1
+ fs-extra: 11.2.0
+ fs-tree-diff: 2.0.1
+ get-caller-file: 2.0.5
+ git-repo-info: 2.1.1
+ glob: 8.1.0
+ heimdalljs: 0.2.6
+ heimdalljs-fs-monitor: 1.1.1
+ heimdalljs-graph: 1.0.0
+ heimdalljs-logger: 0.1.10
+ http-proxy: 1.18.1
+ inflection: 2.0.1
+ inquirer: 9.2.16
+ is-git-url: 1.0.0
+ is-language-code: 3.1.0
+ isbinaryfile: 5.0.2
+ lodash.template: 4.5.0
+ markdown-it: 13.0.2
+ markdown-it-terminal: 0.4.0(markdown-it@13.0.2)
+ minimatch: 7.4.6
+ morgan: 1.10.0
+ nopt: 3.0.6
+ npm-package-arg: 10.1.0
+ os-locale: 5.0.0
+ p-defer: 3.0.0
+ portfinder: 1.0.32
+ promise-map-series: 0.3.0
+ promise.hash.helper: 1.0.8
+ quick-temp: 0.1.8
+ remove-types: 1.0.0
+ resolve: 1.22.8
+ resolve-package-path: 4.0.3
+ safe-stable-stringify: 2.4.3
+ sane: 5.0.1
+ semver: 7.6.0
+ silent-error: 1.1.1
+ sort-package-json: 1.57.0
+ symlink-or-copy: 1.3.1
+ temp: 0.9.4
+ testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq)
+ tiny-lr: 2.0.0
+ tree-sync: 2.1.0
+ walk-sync: 3.0.0
+ watch-detector: 1.0.2
+ workerpool: 6.5.1
+ yam: 1.0.0
+ transitivePeerDependencies:
+ - arc-templates
+ - atpl
+ - babel-core
+ - bracket-template
+ - bufferutil
+ - coffee-script
+ - debug
+ - dot
+ - dust
+ - dustjs-helpers
+ - dustjs-linkedin
+ - eco
+ - ect
+ - ejs
+ - haml-coffee
+ - hamlet
+ - hamljs
+ - handlebars
+ - hogan.js
+ - htmling
+ - jade
+ - jazz
+ - jqtpl
+ - just
+ - liquid-node
+ - liquor
+ - lodash
+ - marko
+ - mote
+ - nunjucks
+ - plates
+ - pug
+ - qejs
+ - ractive
+ - razor-tmpl
+ - react
+ - react-dom
+ - slm
+ - squirrelly
+ - supports-color
+ - swig
+ - swig-templates
+ - teacup
+ - templayed
+ - then-jade
+ - then-pug
+ - tinyliquid
+ - toffee
+ - twig
+ - twing
+ - underscore
+ - utf-8-validate
+ - vash
+ - velocityjs
+ - walrus
+ - whiskers
+ dev: true
+
/ember-cli@5.7.0:
resolution: {integrity: sha512-MKHVcRpDk1ENUCCRGGqZ8yfkCsszvSUbwO09h14vqcfaqcJkOWI+p0oynmdZQMM8OkZp484oLe3+CZCsXO9LfA==}
engines: {node: '>= 18'}
@@ -11516,8 +12092,8 @@ packages:
ensure-posix-path: 1.1.1
execa: 5.1.1
exit: 0.1.2
- express: 4.18.3
- filesize: 10.1.0
+ express: 4.19.1
+ filesize: 10.1.1
find-up: 5.0.0
find-yarn-workspace-root: 2.0.0
fixturify-project: 2.1.1
@@ -11664,7 +12240,7 @@ packages:
dependencies:
'@babel/core': 7.24.3(supports-color@8.1.1)
chalk: 5.3.0
- cli-table3: 0.6.3
+ cli-table3: 0.6.4
debug: 4.3.4(supports-color@8.1.1)
ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
ember-cli-babel: 8.2.0(@babel/core@7.24.3)
@@ -11726,6 +12302,19 @@ packages:
- '@babel/core'
- supports-color
+ /ember-page-title@8.2.3(ember-source@5.6.0):
+ resolution: {integrity: sha512-9XH4EVPCpSCyXRsLPzdDydU4HgQnaVeJJTrRF0WVh5bZERI9DgxuHv1NPmZU28todHRH91KcBc5nx8kIVJmqUw==}
+ engines: {node: 16.* || >= 18}
+ peerDependencies:
+ ember-source: '*'
+ dependencies:
+ '@embroider/addon-shim': 1.8.7
+ '@simple-dom/document': 1.4.0
+ ember-source: 5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/ember-page-title@8.2.3(ember-source@5.7.0):
resolution: {integrity: sha512-9XH4EVPCpSCyXRsLPzdDydU4HgQnaVeJJTrRF0WVh5bZERI9DgxuHv1NPmZU28todHRH91KcBc5nx8kIVJmqUw==}
engines: {node: 16.* || >= 18}
@@ -11739,6 +12328,25 @@ packages:
- supports-color
dev: true
+ /ember-qunit@8.0.2(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.6.0)(qunit@2.19.4):
+ resolution: {integrity: sha512-Rf60jeUTWNsF3Imf/FLujW/B/DFmKVXKmXO1lirTXjpertKfwRhp/3MnN8a/U/WyodTIsERkInGT1IqTtphCdQ==}
+ peerDependencies:
+ '@ember/test-helpers': '>=3.0.3'
+ ember-source: '*'
+ qunit: 2.19.4
+ dependencies:
+ '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(ember-source@5.6.0)(webpack@5.91.0)
+ '@embroider/addon-shim': 1.8.7
+ '@embroider/macros': 1.15.0(@glint/template@1.4.0)
+ ember-cli-test-loader: 3.1.0(@babel/core@7.24.3)
+ ember-source: 5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0)
+ qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@glint/template'
+ - supports-color
+ dev: true
+
/ember-qunit@8.0.2(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4):
resolution: {integrity: sha512-Rf60jeUTWNsF3Imf/FLujW/B/DFmKVXKmXO1lirTXjpertKfwRhp/3MnN8a/U/WyodTIsERkInGT1IqTtphCdQ==}
peerDependencies:
@@ -11768,6 +12376,22 @@ packages:
- supports-color
dev: true
+ /ember-resolver@11.0.1(@babel/core@7.24.3)(ember-source@5.6.0):
+ resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==}
+ engines: {node: 14.* || 16.* || >= 18}
+ peerDependencies:
+ ember-source: '*'
+ peerDependenciesMeta:
+ ember-source:
+ optional: true
+ dependencies:
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-source: 5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+ dev: true
+
/ember-resolver@11.0.1(@babel/core@7.24.3)(ember-source@5.7.0):
resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==}
engines: {node: 14.* || 16.* || >= 18}
@@ -11818,13 +12442,74 @@ packages:
- encoding
dev: true
+ /ember-source@5.6.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(webpack@5.91.0):
+ resolution: {integrity: sha512-dtxi3cVPT4/+NyhA+a+4UL/i+ut4Fuu3uJAgkVqrN1XlK4TXpyVp9I6VbH7DjD5+LJdF1+UqIn8GJ50dIdoH2Q==}
+ engines: {node: '>= 16.*'}
+ peerDependencies:
+ '@glimmer/component': ^1.1.2
+ dependencies:
+ '@babel/helper-module-imports': 7.24.3
+ '@ember/edition-utils': 1.2.0
+ '@glimmer/compiler': 0.85.13
+ '@glimmer/component': 1.1.2(@babel/core@7.24.3)
+ '@glimmer/destroyable': 0.85.13
+ '@glimmer/env': 0.1.7
+ '@glimmer/global-context': 0.85.13
+ '@glimmer/interfaces': 0.85.13
+ '@glimmer/manager': 0.85.13
+ '@glimmer/node': 0.85.13
+ '@glimmer/opcode-compiler': 0.85.13
+ '@glimmer/owner': 0.85.13
+ '@glimmer/program': 0.85.13
+ '@glimmer/reference': 0.85.13
+ '@glimmer/runtime': 0.85.13
+ '@glimmer/syntax': 0.85.13
+ '@glimmer/util': 0.85.13
+ '@glimmer/validator': 0.89.0
+ '@glimmer/vm': 0.85.13
+ '@glimmer/vm-babel-plugins': 0.85.13(@babel/core@7.24.3)
+ '@simple-dom/interface': 1.4.0
+ babel-plugin-debug-macros: 0.3.4(@babel/core@7.24.3)
+ babel-plugin-ember-template-compilation: 2.2.1
+ babel-plugin-filter-imports: 4.0.0
+ backburner.js: 2.8.0
+ broccoli-concat: 4.2.5
+ broccoli-debug: 0.6.5
+ broccoli-file-creator: 2.1.1
+ broccoli-funnel: 3.0.8
+ broccoli-merge-trees: 4.2.0
+ chalk: 4.1.2
+ ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-cli-get-component-path-option: 1.0.0
+ ember-cli-is-package-missing: 1.0.0
+ ember-cli-normalize-entity-name: 1.0.0
+ ember-cli-path-utils: 1.0.0
+ ember-cli-string-utils: 1.1.0
+ ember-cli-typescript-blueprint-polyfill: 0.1.0
+ ember-cli-version-checker: 5.1.2
+ ember-router-generator: 2.0.0
+ inflection: 2.0.1
+ route-recognizer: 0.3.4
+ router_js: 8.0.5(route-recognizer@0.3.4)
+ semver: 7.6.0
+ silent-error: 1.1.1
+ simple-html-tokenizer: 0.5.11
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@glint/template'
+ - rsvp
+ - supports-color
+ - webpack
+ dev: true
+
/ember-source@5.7.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.4.0):
resolution: {integrity: sha512-iOZVyxLBzGewEThDDsNRZ9y02SNH42PWSPC9U4O94pew7ktld3IpIODCDjLCtKWn2zAGM9DhWTMrXz27HI1UKw==}
engines: {node: '>= 16.*'}
peerDependencies:
'@glimmer/component': ^1.1.2
dependencies:
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@ember/edition-utils': 1.2.0
'@glimmer/compiler': 0.87.1
'@glimmer/component': 1.1.2(@babel/core@7.24.3)
@@ -11885,7 +12570,7 @@ packages:
peerDependencies:
'@glimmer/component': ^1.1.2
dependencies:
- '@babel/helper-module-imports': 7.24.1
+ '@babel/helper-module-imports': 7.24.3
'@ember/edition-utils': 1.2.0
'@glimmer/compiler': 0.87.1
'@glimmer/component': 1.1.2(@babel/core@7.24.3)
@@ -11949,23 +12634,6 @@ packages:
- supports-color
dev: true
- /ember-template-imports@3.4.2:
- resolution: {integrity: sha512-OS8TUVG2kQYYwP3netunLVfeijPoOKIs1SvPQRTNOQX4Pu8xGGBEZmrv0U1YTnQn12Eg+p6w/0UdGbUnITjyzw==}
- engines: {node: 12.* || >= 14}
- dependencies:
- babel-import-util: 0.2.0
- broccoli-stew: 3.0.0
- ember-cli-babel-plugin-helpers: 1.1.1
- ember-cli-version-checker: 5.1.2
- line-column: 1.0.2
- magic-string: 0.25.9
- parse-static-imports: 1.1.0
- string.prototype.matchall: 4.0.10
- validate-peer-dependencies: 1.2.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/ember-template-imports@4.1.0:
resolution: {integrity: sha512-FMC13/FWPZBL4zMkFtspgGqc9zYfrUXf8/MV83Eke3ZYVR4oKb9CuB65BRmgCvFwv8R5PGkpUhks0i5kjYeAHw==}
engines: {node: 16.* || >= 18}
@@ -12005,7 +12673,7 @@ packages:
engines: {node: 16.* || >= 18.*}
dependencies:
chalk: 4.1.2
- cli-table3: 0.6.3
+ cli-table3: 0.6.4
core-object: 3.1.5
debug: 4.3.4(supports-color@8.1.1)
ember-try-config: 4.0.0
@@ -12164,11 +12832,11 @@ packages:
safe-regex-test: 1.0.3
string.prototype.trim: 1.2.9
string.prototype.trimend: 1.0.8
- string.prototype.trimstart: 1.0.7
+ string.prototype.trimstart: 1.0.8
typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1
typed-array-byte-offset: 1.0.2
- typed-array-length: 1.0.5
+ typed-array-length: 1.0.6
unbox-primitive: 1.0.2
which-typed-array: 1.1.15
@@ -12239,13 +12907,14 @@ packages:
optionalDependencies:
source-map: 0.6.1
- /eslint-compat-utils@0.1.2(eslint@8.57.0):
- resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==}
+ /eslint-compat-utils@0.5.0(eslint@8.57.0):
+ resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
dependencies:
eslint: 8.57.0
+ semver: 7.6.0
dev: false
/eslint-config-prettier@9.1.0(eslint@8.57.0):
@@ -12296,8 +12965,8 @@ packages:
- supports-color
dev: false
- /eslint-plugin-es-x@7.5.0(eslint@8.57.0):
- resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==}
+ /eslint-plugin-es-x@7.6.0(eslint@8.57.0):
+ resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '>=8'
@@ -12305,7 +12974,7 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@eslint-community/regexpp': 4.10.0
eslint: 8.57.0
- eslint-compat-utils: 0.1.2(eslint@8.57.0)
+ eslint-compat-utils: 0.5.0(eslint@8.57.0)
dev: false
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0):
@@ -12319,7 +12988,7 @@ packages:
optional: true
dependencies:
'@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3)
- array-includes: 3.1.7
+ array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
@@ -12364,7 +13033,7 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
builtins: 5.0.1
eslint: 8.57.0
- eslint-plugin-es-x: 7.5.0(eslint@8.57.0)
+ eslint-plugin-es-x: 7.6.0(eslint@8.57.0)
get-tsconfig: 4.7.3
globals: 13.24.0
ignore: 5.3.1
@@ -12534,7 +13203,7 @@ packages:
resolution: {integrity: sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==}
/eventemitter2@5.0.1:
- resolution: {integrity: sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==}
+ resolution: {integrity: sha1-YZegldX7a1folC9v1+qtY6CclFI=}
/eventemitter2@6.4.9:
resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==}
@@ -12608,7 +13277,7 @@ packages:
dev: true
/exists-sync@0.0.3:
- resolution: {integrity: sha512-/qPB5E0cRuA/Cs5vHrmKYSfhIBCPJs9Vm3e9aIejMwwbe6idMeNbGu1g5stvr/bXT6HywHckLPEkmY7HK6FlwA==}
+ resolution: {integrity: sha1-uRAAC+27ETs3i4L19adjgQdiLc8=}
deprecated: Please replace with usage of fs.existsSync
/exit@0.1.2:
@@ -12640,8 +13309,8 @@ packages:
engines: {node: '>=12.0.0'}
dev: true
- /express@4.18.3:
- resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==}
+ /express@4.19.1:
+ resolution: {integrity: sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==}
engines: {node: '>= 0.10.0'}
dependencies:
accepts: 1.3.8
@@ -12649,7 +13318,7 @@ packages:
body-parser: 1.20.2
content-disposition: 0.5.4
content-type: 1.0.5
- cookie: 0.5.0
+ cookie: 0.6.0
cookie-signature: 1.0.6
debug: 2.6.9(supports-color@8.1.1)
depd: 2.0.0
@@ -12861,8 +13530,8 @@ packages:
dependencies:
flat-cache: 3.2.0
- /filesize@10.1.0:
- resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==}
+ /filesize@10.1.1:
+ resolution: {integrity: sha512-L0cdwZrKlwZQkMSFnCflJ6J2Y+5egO/p3vgRSDQGxQt++QbUZe5gMbRO6kg6gzwQDPvq2Fk9AmoxUNfZ5gdqaQ==}
engines: {node: '>= 10.4.0'}
/fill-range@4.0.0:
@@ -13798,8 +14467,8 @@ packages:
dependencies:
parse-passwd: 1.0.0
- /hono@4.1.2:
- resolution: {integrity: sha512-pbfllzxpZifsp8gbjB01wetLk6Lc4p0OkJmtbH92CYFMPAdL6dzS2tHldfPjnNP87mNJS717P72lt6jzZSqg/g==}
+ /hono@4.1.3:
+ resolution: {integrity: sha512-V0I6qCw0gn2MA4LLtyXe6oD3/7ToeQf5Zv98o7uSuLuViQgWHJeYoYrZ4NbXhOtg4SaZjNJJm1+XuFB3LN+j6A==}
engines: {node: '>=16.0.0'}
/hosted-git-info@4.1.0:
@@ -13961,13 +14630,13 @@ packages:
safer-buffer: 2.1.2
dev: true
- /icss-utils@5.1.0(postcss@8.4.37):
+ /icss-utils@5.1.0(postcss@8.4.38):
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.37
+ postcss: 8.4.38
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -14368,7 +15037,7 @@ packages:
has-symbols: 1.0.3
/is-type@0.0.1:
- resolution: {integrity: sha512-YwJh/zBVrcJ90aAnPBM0CbHvm7lG9ao7lIFeqTZ1UQj4iFLpM5CikdaU+dGGesrMJwxLqPGmjjrUrQ6Kn3Zh+w==}
+ resolution: {integrity: sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=}
dependencies:
core-util-is: 1.0.3
@@ -15079,7 +15748,7 @@ packages:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
/media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
engines: {node: '>= 0.6'}
/mem@5.1.1:
@@ -15103,7 +15772,7 @@ packages:
readable-stream: 1.0.34
/merge-descriptors@1.0.1:
- resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+ resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=}
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -16143,7 +16812,7 @@ packages:
async: 3.2.5
debug: 4.3.4(supports-color@8.1.1)
pidusage: 2.0.21
- systeminformation: 5.22.5
+ systeminformation: 5.22.6
tx2: 1.0.5
transitivePeerDependencies:
- supports-color
@@ -16226,42 +16895,42 @@ packages:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.37):
+ /postcss-modules-extract-imports@3.0.0(postcss@8.4.38):
resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.37
+ postcss: 8.4.38
- /postcss-modules-local-by-default@4.0.4(postcss@8.4.37):
+ /postcss-modules-local-by-default@4.0.4(postcss@8.4.38):
resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.37)
- postcss: 8.4.37
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
- /postcss-modules-scope@3.1.1(postcss@8.4.37):
+ /postcss-modules-scope@3.1.1(postcss@8.4.38):
resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.37
+ postcss: 8.4.38
postcss-selector-parser: 6.0.16
- /postcss-modules-values@4.0.0(postcss@8.4.37):
+ /postcss-modules-values@4.0.0(postcss@8.4.38):
resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.37)
- postcss: 8.4.37
+ icss-utils: 5.1.0(postcss@8.4.38)
+ postcss: 8.4.38
/postcss-selector-parser@6.0.16:
resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
@@ -16273,8 +16942,8 @@ packages:
/postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- /postcss@8.4.37:
- resolution: {integrity: sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==}
+ /postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
@@ -16487,8 +17156,8 @@ packages:
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- /quibble@0.9.1:
- resolution: {integrity: sha512-2EkLLm3CsBhbHfYEgBWHSJZZRpVHUZLeuJVEQoU/lsCqxcOvVkgVlF4nWv2ACWKkb0lgxgMh3m8vq9rhx9LTIg==}
+ /quibble@0.9.2:
+ resolution: {integrity: sha512-BrL7hrZcbyyt5ZDfePkGFDc3m82uUtxCPOnpRUrkOdtBnmV9ldQKxXORkKL8eIzToRNaCpIPyKyfdfq/tBlFAA==}
engines: {node: '>= 0.14.0'}
dependencies:
lodash: 4.17.21
@@ -17612,13 +18281,17 @@ packages:
strip-ansi: 7.1.0
dev: true
- /string.prototype.matchall@4.0.10:
- resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
+ /string.prototype.matchall@4.0.11:
+ resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
+ engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.23.2
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
get-intrinsic: 1.2.4
+ gopd: 1.0.1
has-symbols: 1.0.3
internal-slot: 1.0.7
regexp.prototype.flags: 1.5.2
@@ -17641,12 +18314,13 @@ packages:
define-properties: 1.2.1
es-object-atoms: 1.0.0
- /string.prototype.trimstart@1.0.7:
- resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+ /string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
/string_decoder@0.10.31:
resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
@@ -17751,7 +18425,7 @@ packages:
webpack: 5.91.0
/styled_string@0.0.1:
- resolution: {integrity: sha512-DU2KZiB6VbPkO2tGSqQ9n96ZstUPjW7X4sGO6V2m1myIQluX0p1Ol8BrA/l6/EesqhMqXOIXs3cJNOy1UuU2BA==}
+ resolution: {integrity: sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=}
/sum-up@1.0.3:
resolution: {integrity: sha512-zw5P8gnhiqokJUWRdR6F4kIIIke0+ubQSGyYUY506GCbJWtV7F6Xuy0j6S125eSX2oF+a8KdivsZ8PlVEH0Mcw==}
@@ -17819,8 +18493,8 @@ packages:
transitivePeerDependencies:
- supports-color
- /systeminformation@5.22.5:
- resolution: {integrity: sha512-wH8lJMlQAkBGu78EjtYO6eFMPsFrAMWcWDsQQb1+cwS9cuFJaGcZ6gah9ZXWpHpIST1slyyuk0KuqdcAjbmM3A==}
+ /systeminformation@5.22.6:
+ resolution: {integrity: sha512-hUTQX+bRgIFbv1T/z251NtwGwNIeSyWURnT2BGnsYu6dQNbkiBl4oAwk50acVfITFq1Zvb8KDNgibQK9uGlUGg==}
engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true
@@ -17839,8 +18513,8 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
- /tar@6.2.0:
- resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==}
+ /tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
dependencies:
chownr: 2.0.0
@@ -17893,12 +18567,12 @@ packages:
commander: 2.20.3
source-map-support: 0.5.21
- /testdouble@3.20.1:
- resolution: {integrity: sha512-D9Or6ayxr16dPPEkmXyGb8ow7VcQjUzuYFUxPTkx2FdSkn5Z6EC6cxQHwEGhedmE30FAJOYiAW+r7XXg6FmYOQ==}
+ /testdouble@3.20.2:
+ resolution: {integrity: sha512-790e9vJKdfddWNOaxW1/V9FcMk48cPEl3eJSj2i8Hh1fX89qArEJ6cp3DBnaECpGXc3xKJVWbc1jeNlWYWgiMg==}
engines: {node: '>= 16'}
dependencies:
lodash: 4.17.21
- quibble: 0.9.1
+ quibble: 0.9.2
stringify-object-es5: 2.5.0
theredoc: 1.0.0
@@ -17915,7 +18589,7 @@ packages:
compression: 1.7.4
consolidate: 0.16.0(mustache@4.2.0)
execa: 1.0.0
- express: 4.18.3
+ express: 4.19.1
fireworm: 0.7.2
glob: 7.2.3
http-proxy: 1.18.1
@@ -18235,64 +18909,64 @@ packages:
dev: true
optional: true
- /turbo-darwin-64@1.12.5:
- resolution: {integrity: sha512-0GZ8reftwNQgIQLHkHjHEXTc/Z1NJm+YjsrBP+qhM/7yIZ3TEy9gJhuogDt2U0xIWwFgisTyzbtU7xNaQydtoA==}
+ /turbo-darwin-64@1.13.0:
+ resolution: {integrity: sha512-ctHeJXtQgBcgxnCXwrJTGiq57HtwF7zWz5NTuSv//5yeU01BtQIt62ArKfjudOhRefWJbX3Z5srn88XTb9hfww==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
- /turbo-darwin-arm64@1.12.5:
- resolution: {integrity: sha512-8WpOLNNzvH6kohQOjihD+gaWL+ZFNfjvBwhOF0rjEzvW+YR3Pa7KjhulrjWyeN2yMFqAPubTbZIGOz1EVXLuQA==}
+ /turbo-darwin-arm64@1.13.0:
+ resolution: {integrity: sha512-/Q9/pNFkF9w83tNxwMpgapwLYdQ12p8mpty2YQRoUiS9ClWkcqe136jR0mtuMqzlNlpREOFZaoyIthjt6Sdo0g==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
- /turbo-linux-64@1.12.5:
- resolution: {integrity: sha512-INit73+bNUpwqGZCxgXCR3I+cQsdkQ3/LkfkgSOibkpg+oGqxJRzeXw3sp990d7SCoE8QOcs3iw+PtiFX/LDAA==}
+ /turbo-linux-64@1.13.0:
+ resolution: {integrity: sha512-hgbT7o020BGV4L7Sd8hhFTd5zVKPKxbsr0dPfel/9NkdTmptz2aGZ0Vb2MAa18SY3XaCQpDxmdYuOzvvRpo5ZA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /turbo-linux-arm64@1.12.5:
- resolution: {integrity: sha512-6lkRBvxtI/GQdGtaAec9LvVQUoRw6nXFp0kM+Eu+5PbZqq7yn6cMkgDJLI08zdeui36yXhone8XGI8pHg8bpUQ==}
+ /turbo-linux-arm64@1.13.0:
+ resolution: {integrity: sha512-WK01i2wDZARrV+HEs495A3hNeGMwQR5suYk7G+ceqqW7b+dOTlQdvUjnI3sg7wAnZPgjafFs/hoBaZdJjVa/nw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /turbo-windows-64@1.12.5:
- resolution: {integrity: sha512-gQYbOhZg5Ww0bQ/bC0w/4W6yQRwBumUUnkB+QPo15VznwxZe2a7bo6JM+9Xy9dKLa/kn+p7zTqme4OEp6M3/Yg==}
+ /turbo-windows-64@1.13.0:
+ resolution: {integrity: sha512-hJgSZJZwlWHNwLEthaqJqJWGm4NqF5X/I7vE0sPE4i/jeDl8f0n1hcOkgJkJiNXVxhj+qy/9+4dzbPLKT9imaQ==}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: false
optional: true
- /turbo-windows-arm64@1.12.5:
- resolution: {integrity: sha512-auvhZ9FrhnvQ4mgBlY9O68MT4dIfprYGvd2uPICba/mHUZZvVy5SGgbHJ0KbMwaJfnnFoPgLJO6M+3N2gDprKw==}
+ /turbo-windows-arm64@1.13.0:
+ resolution: {integrity: sha512-L/ErxYoXeq8tmjU/AIGicC9VyBN1zdYw8JlM4yPmMI0pJdY8E4GaYK1IiIazqq7M72lmQhU/WW7fV9FqEktwrw==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
- /turbo@1.12.5:
- resolution: {integrity: sha512-FATU5EnhrYG8RvQJYFJnDd18DpccDjyvd53hggw9T9JEg9BhWtIEoeaKtBjYbpXwOVrJQMDdXcIB4f2nD3QPPg==}
+ /turbo@1.13.0:
+ resolution: {integrity: sha512-r02GtNmkOPcQvUzVE6lg474QVLyU02r3yh3lUGqrFHf5h5ZEjgDGWILsAUqplVqjri1Y/oOkTssks4CObTAaiw==}
hasBin: true
optionalDependencies:
- turbo-darwin-64: 1.12.5
- turbo-darwin-arm64: 1.12.5
- turbo-linux-64: 1.12.5
- turbo-linux-arm64: 1.12.5
- turbo-windows-64: 1.12.5
- turbo-windows-arm64: 1.12.5
+ turbo-darwin-64: 1.13.0
+ turbo-darwin-arm64: 1.13.0
+ turbo-linux-64: 1.13.0
+ turbo-linux-arm64: 1.13.0
+ turbo-windows-64: 1.13.0
+ turbo-windows-arm64: 1.13.0
dev: false
/tv4@1.3.0:
@@ -18374,8 +19048,8 @@ packages:
has-proto: 1.0.3
is-typed-array: 1.1.13
- /typed-array-length@1.0.5:
- resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==}
+ /typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
@@ -18559,7 +19233,7 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
/utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
engines: {node: '>= 0.4.0'}
/uuid@3.4.0:
@@ -18577,13 +19251,6 @@ packages:
dependencies:
builtins: 5.0.1
- /validate-peer-dependencies@1.2.0:
- resolution: {integrity: sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA==}
- dependencies:
- resolve-package-path: 3.1.0
- semver: 7.6.0
- dev: true
-
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -19136,7 +19803,7 @@ packages:
engines: {node: '>=0.10.0'}
hasBin: true
dependencies:
- express: 4.18.3
+ express: 4.19.1
graceful-fs: 4.2.11
markdown-it: 4.4.0
mdn-links: 0.1.0
@@ -19180,7 +19847,6 @@ packages:
ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
ember-cli-babel: 8.2.0(@babel/core@7.24.3)
ember-inflector: 4.0.2(@babel/core@7.24.3)
- pnpm-sync-dependencies-meta-injected: 0.0.10
typescript: 5.4.3
webpack: 5.91.0
transitivePeerDependencies:
@@ -19249,7 +19915,6 @@ packages:
dependencies:
'@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
ember-cli-babel: 8.2.0(@babel/core@7.24.3)
- pnpm-sync-dependencies-meta-injected: 0.0.10
transitivePeerDependencies:
- '@babel/core'
- '@glint/template'
@@ -19306,7 +19971,6 @@ packages:
debug: 4.3.4(supports-color@8.1.1)
ember-cli-htmlbars: 6.3.0
ember-cli-test-loader: 3.1.0(@babel/core@7.24.3)
- pnpm-sync-dependencies-meta-injected: 0.0.10
tmp: 0.2.3
transitivePeerDependencies:
- supports-color
@@ -19375,7 +20039,7 @@ packages:
'@hono/node-server': 1.8.2
'@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.3)(@glint/template@1.4.0)
chalk: 5.3.0
- hono: 4.1.2
+ hono: 4.1.3
pm2: 5.3.1
transitivePeerDependencies:
- bufferutil
@@ -19588,7 +20252,6 @@ packages:
ember-cli-version-checker: 5.1.2
git-repo-info: 2.1.1
npm-git-info: 1.0.3
- pnpm-sync-dependencies-meta-injected: 0.0.10
semver: 7.6.0
silent-error: 1.1.1
transitivePeerDependencies:
@@ -19729,7 +20392,6 @@ packages:
'@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
'@embroider/macros': 1.15.0(@glint/template@1.4.0)
ember-cli-babel: 8.2.0(@babel/core@7.24.3)
- pnpm-sync-dependencies-meta-injected: 0.0.10
transitivePeerDependencies:
- '@babel/core'
- '@glint/template'
@@ -19927,3 +20589,100 @@ packages:
- webpack-cli
- whiskers
dev: true
+
+ file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0):
+ resolution: {directory: packages/unpublished-test-infra, type: directory}
+ id: file:packages/unpublished-test-infra
+ name: '@ember-data/unpublished-test-infra'
+ engines: {node: '>= 18.19.1'}
+ dependencies:
+ '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
+ '@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/store': file:packages/store(@babel/core@7.24.3)(@ember-data/request@5.4.0-alpha.43)(@ember-data/tracking@5.4.0-alpha.43)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@ember/edition-utils': 1.2.0
+ '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(ember-source@5.6.0)(webpack@5.91.0)
+ '@embroider/macros': 1.15.0(@glint/template@1.4.0)
+ '@types/qunit': 2.19.10
+ '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)
+ broccoli-merge-trees: 4.2.0
+ chalk: 4.1.2
+ ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.4.1)
+ ember-get-config: 2.1.1(@babel/core@7.24.3)(@glint/template@1.4.0)
+ qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ semver: 7.6.0
+ testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq)
+ typescript: 5.4.3
+ webpack: 5.91.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@ember/string'
+ - '@embroider/addon-shim'
+ - '@glint/template'
+ - '@swc/core'
+ - arc-templates
+ - atpl
+ - babel-core
+ - bracket-template
+ - bufferutil
+ - coffee-script
+ - debug
+ - dot
+ - dust
+ - dustjs-helpers
+ - dustjs-linkedin
+ - eco
+ - ect
+ - ejs
+ - ember-cli
+ - ember-cli-test-loader
+ - ember-source
+ - esbuild
+ - haml-coffee
+ - hamlet
+ - hamljs
+ - handlebars
+ - hogan.js
+ - htmling
+ - jade
+ - jazz
+ - jqtpl
+ - just
+ - liquid-node
+ - liquor
+ - lodash
+ - marko
+ - mote
+ - nunjucks
+ - plates
+ - pug
+ - qejs
+ - ractive
+ - razor-tmpl
+ - react
+ - react-dom
+ - slm
+ - squirrelly
+ - supports-color
+ - swig
+ - swig-templates
+ - teacup
+ - templayed
+ - then-jade
+ - then-pug
+ - tinyliquid
+ - toffee
+ - twig
+ - twing
+ - uglify-js
+ - underscore
+ - utf-8-validate
+ - vash
+ - velocityjs
+ - walrus
+ - webpack-cli
+ - whiskers
+ dev: true
diff --git a/tests/incremental-json-api/.eslintrc.cjs b/tests/incremental-json-api/.eslintrc.cjs
new file mode 100644
index 00000000000..b9660bad7f1
--- /dev/null
+++ b/tests/incremental-json-api/.eslintrc.cjs
@@ -0,0 +1,45 @@
+const base = require('@warp-drive/internal-config/eslint/base.cjs');
+const ignore = require('@warp-drive/internal-config/eslint/ignore.cjs');
+const imports = require('@warp-drive/internal-config/eslint/imports.cjs');
+const isolation = require('@warp-drive/internal-config/eslint/isolation.cjs');
+const node = require('@warp-drive/internal-config/eslint/node.cjs');
+const parser = require('@warp-drive/internal-config/eslint/parser.cjs');
+const qunit = require('@warp-drive/internal-config/eslint/qunit.cjs');
+const typescript = require('@warp-drive/internal-config/eslint/typescript.cjs');
+
+module.exports = {
+ ...parser.defaults(),
+ ...base.settings(),
+
+ plugins: [...base.plugins(), ...imports.plugins()],
+ extends: [...base.extend()],
+ rules: Object.assign(
+ base.rules(),
+ imports.rules(),
+ isolation.rules({
+ allowedImports: [
+ '@ember/application',
+ '@ember/debug',
+ '@ember/routing/route',
+ '@ember/service',
+ '@glimmer/component',
+ '@glimmer/tracking',
+ ],
+ }),
+ {}
+ ),
+
+ ignorePatterns: ignore.ignoreRules(),
+
+ overrides: [
+ node.config(),
+ node.defaults({
+ files: ['./server/**/*.{js,ts}'],
+ }),
+ typescript.defaults(),
+ qunit.defaults({
+ files: ['tests/**/*.{js,ts}'],
+ allowedImports: [],
+ }),
+ ],
+};
diff --git a/tests/incremental-json-api/README.md b/tests/incremental-json-api/README.md
new file mode 100644
index 00000000000..865d34a9bf7
--- /dev/null
+++ b/tests/incremental-json-api/README.md
@@ -0,0 +1,3 @@
+# Incremental JSON:API
+
+Demonstrates the configuration we recommend for JSON:API applications
diff --git a/tests/incremental-json-api/app/app.ts b/tests/incremental-json-api/app/app.ts
new file mode 100644
index 00000000000..8f235d166e6
--- /dev/null
+++ b/tests/incremental-json-api/app/app.ts
@@ -0,0 +1,16 @@
+import Application from '@ember/application';
+
+import loadInitializers from 'ember-load-initializers';
+
+import config from './config/environment';
+import Resolver from './resolver';
+
+class App extends Application {
+ modulePrefix = config.modulePrefix;
+ podModulePrefix = config.podModulePrefix;
+ override Resolver = Resolver;
+}
+
+loadInitializers(App, config.modulePrefix);
+
+export default App;
diff --git a/tests/incremental-json-api/app/components/.gitkeep b/tests/incremental-json-api/app/components/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/app/components/book-list.hbs b/tests/incremental-json-api/app/components/book-list.hbs
new file mode 100644
index 00000000000..c6c29c8893c
--- /dev/null
+++ b/tests/incremental-json-api/app/components/book-list.hbs
@@ -0,0 +1,22 @@
+
+ {{#if this.books.data}}
+
+ {{#each this.books.data as |book|}}
+
+ {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
+ by {{book.author}} ISBN: {{book.isbn}}
+
+ {{/each}}
+
+
+ {{#each this.links.filteredPages as |page|}}
+
+ {{#if (mod page.index 11)}}
+
+ {{/if}}
+ {{/each}}
+
+ {{else}}
+
No books found
+ {{/if}}
+
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/components/book-list.ts b/tests/incremental-json-api/app/components/book-list.ts
new file mode 100644
index 00000000000..bed74d8bf40
--- /dev/null
+++ b/tests/incremental-json-api/app/components/book-list.ts
@@ -0,0 +1,81 @@
+import { service } from '@ember/service';
+import Component from '@glimmer/component';
+import { cached, tracked } from '@glimmer/tracking';
+
+import { query } from '@ember-data/json-api/request';
+import { filterEmpty } from '@ember-data/request-utils';
+import type Store from '@ember-data/store';
+import type { Document } from '@ember-data/store/-private/document';
+
+import type Book from '../models/book';
+import type { ApiPage } from '../utils/pagination-links';
+import { PaginationLinks } from '../utils/pagination-links';
+
+export interface BookListSignature {
+ Element: HTMLDivElement;
+ Args: {
+ sort: string | null;
+ filter: string | null;
+ genre: string | null;
+ author: string | null;
+ page: number | null;
+ limit: number | null;
+ };
+}
+
+class AsyncContent {
+ @tracked content: T | undefined;
+}
+
+export default class BookListComponent extends Component {
+ @service declare store: Store;
+ @tracked currentUrl: string | null = null;
+ links = new PaginationLinks();
+ dataWrapper = new AsyncContent>();
+
+ // we use this to detect inbound data changes
+ _firstPageOptions: { url: string } | null = null;
+
+ @cached
+ get firstPageOptions(): { url: string } {
+ const { sort, filter, genre, author, page, limit } = this.args;
+
+ const options = query('book', filterEmpty({ sort, filter, genre, author, page, limit }));
+ this._firstPageOptions = options;
+ return options;
+ }
+
+ @cached
+ get currentPage() {
+ const _firstPageOptions = this._firstPageOptions;
+ const firstPageOptions = this.firstPageOptions;
+ const currentUrl = this.currentUrl;
+
+ // if the first page options changed, we need to fetch a new first page
+ if (_firstPageOptions?.url !== firstPageOptions.url) {
+ return this.fetchPage(firstPageOptions);
+ }
+
+ return this.fetchPage(currentUrl ? { url: currentUrl } : firstPageOptions);
+ }
+
+ get books(): Document | null {
+ return this.currentPage.content || null;
+ }
+
+ fetchPage(options: { url: string }) {
+ const dataWrapper = this.dataWrapper;
+ const future = this.store.request>(options);
+
+ void future.then((books) => {
+ dataWrapper.content = books.content;
+ this.links.addPage(books.content as unknown as ApiPage);
+ });
+
+ return dataWrapper;
+ }
+
+ updatePage = (url: string) => {
+ this.currentUrl = url;
+ };
+}
diff --git a/tests/incremental-json-api/app/components/book-search.hbs b/tests/incremental-json-api/app/components/book-search.hbs
new file mode 100644
index 00000000000..8d5f3d34442
--- /dev/null
+++ b/tests/incremental-json-api/app/components/book-search.hbs
@@ -0,0 +1,63 @@
+
+ Author
+
+ --
+ {{#each @authors as |author|}}
+ {{author.name}}
+ {{/each}}
+
+
+ Genre
+
+ --
+ {{#each @genres as |genre|}}
+ {{genre.name}}
+ {{/each}}
+
+
+ Title Includes
+
+
+
+
+ Sort By
+
+ --
+ {{#each this.sortOptions as |sortOption|}}
+ {{sortOption}}
+ {{/each}}
+
+
+ Direction
+
+ {{#if this.sort}}
+ Ascending
+ Descending
+ {{else}}
+ --
+ {{/if}}
+
+
+ {{#if this.sort}}
+ Then Sort By
+
+ --
+ {{#each this.sortOptions as |sortOption|}}
+ {{sortOption}}
+ {{/each}}
+
+
+ Direction
+
+ {{#if this.sort2}}
+ Ascending
+ Descending
+ {{else}}
+ --
+ {{/if}}
+
+ {{/if}}
+
+
+
+
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/components/book-search.ts b/tests/incremental-json-api/app/components/book-search.ts
new file mode 100644
index 00000000000..8aab0aceac3
--- /dev/null
+++ b/tests/incremental-json-api/app/components/book-search.ts
@@ -0,0 +1,56 @@
+import { service } from '@ember/service';
+import Component from '@glimmer/component';
+import { cached, tracked } from '@glimmer/tracking';
+
+import type Store from '@ember-data/store';
+
+export interface BookSearchSignature {
+ Element: HTMLDivElement;
+ Args: null;
+}
+
+type SearchKeys = 'sort2' | 'sort' | 'title' | 'genre' | 'author' | 'sortDirection' | 'sort2Direction';
+
+export default class BookListComponent extends Component {
+ @service declare store: Store;
+
+ @tracked sort: string | null = 'title';
+ @tracked sort2: string | null = 'publicationDate';
+ @tracked title: string | null = null;
+ @tracked genre: string | null = null;
+ @tracked author: string | null = null;
+ @tracked sortDirection = 'asc';
+ @tracked sort2Direction = 'asc';
+ _lastSortDirection = 'asc';
+ _lastSort2Direction = 'asc';
+
+ @cached
+ get sortOptions() {
+ return Object.keys(this.store.getSchemaDefinitionService().attributesDefinitionFor({ type: 'book' }));
+ }
+
+ @cached
+ get sortQuery() {
+ const sort1 = this.sort ? `${this.sort}:${this.sortDirection}` : '';
+ const sort2 = sort1 && this.sort2 ? `${this.sort2}:${this.sort2Direction}` : '';
+ return sort2 ? `${sort1},${sort2}` : sort1;
+ }
+
+ update = (event: InputEvent & { target: HTMLInputElement }) => {
+ event.preventDefault();
+ const name = event.target.id as SearchKeys;
+ this[name] = event.target.value;
+
+ if (name === 'sort') {
+ this.sortDirection =
+ event.target.value === '' ? '' : this._lastSortDirection === '' ? 'asc' : this._lastSortDirection;
+ this._lastSortDirection = this.sortDirection;
+ }
+
+ if (name === 'sort2') {
+ this.sort2Direction =
+ event.target.value === '' ? '' : this._lastSort2Direction === '' ? 'asc' : this._lastSort2Direction;
+ this._lastSort2Direction = this.sort2Direction;
+ }
+ };
+}
diff --git a/tests/incremental-json-api/app/components/infinite-books.hbs b/tests/incremental-json-api/app/components/infinite-books.hbs
new file mode 100644
index 00000000000..f88275006ad
--- /dev/null
+++ b/tests/incremental-json-api/app/components/infinite-books.hbs
@@ -0,0 +1,15 @@
+
+
+ {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
+ by {{book.author}} ISBN: {{book.isbn}}
+
+
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/components/infinite-books.ts b/tests/incremental-json-api/app/components/infinite-books.ts
new file mode 100644
index 00000000000..07da7e93729
--- /dev/null
+++ b/tests/incremental-json-api/app/components/infinite-books.ts
@@ -0,0 +1,47 @@
+import { service } from '@ember/service';
+import Component from '@glimmer/component';
+import { tracked } from '@glimmer/tracking';
+
+import type Store from '@ember-data/store';
+import type { Document } from '@ember-data/store/-private/document';
+
+import type Book from '../models/book';
+
+export interface InfiniteBookSignature {
+ Element: HTMLUListElement;
+ Args: {
+ allBooks: Document;
+ };
+}
+
+class Pages {
+ @tracked pages: Document[] = [];
+ @tracked data: T[] = [];
+
+ constructor(page: Document) {
+ this.pages = [page];
+ this.data = page.data!.slice();
+ }
+
+ addPage(page: Document) {
+ this.pages.push(page);
+ this.data = this.data.concat(page.data!);
+ }
+}
+
+export default class InfiniteBookComponent extends Component {
+ @service declare store: Store;
+ pageCollection = new Pages(this.args.allBooks);
+
+ get books(): Book[] {
+ return this.pageCollection.data;
+ }
+
+ next = async () => {
+ const page = this.pageCollection.pages.at(-1);
+ const result = await page?.next();
+ if (result) {
+ this.pageCollection.addPage(result);
+ }
+ };
+}
diff --git a/tests/incremental-json-api/app/components/page-link.hbs b/tests/incremental-json-api/app/components/page-link.hbs
new file mode 100644
index 00000000000..c2d8d291c15
--- /dev/null
+++ b/tests/incremental-json-api/app/components/page-link.hbs
@@ -0,0 +1,3 @@
+{{#if (or (eq @link '.') (eq @link '...'))}}{{@link}}{{else}}
+{{@text}}
+{{/if}}
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/config/environment.d.ts b/tests/incremental-json-api/app/config/environment.d.ts
new file mode 100644
index 00000000000..69d4d4d7fcd
--- /dev/null
+++ b/tests/incremental-json-api/app/config/environment.d.ts
@@ -0,0 +1,18 @@
+export default config;
+
+/**
+ * Type declarations for
+ * import config from './config/environment'
+ *
+ * For now these need to be managed by the developer
+ * since different ember addons can materialize new entries.
+ */
+declare const config: {
+ environment: 'production' | 'development' | 'testing';
+ modulePrefix: string;
+ podModulePrefix: string;
+ locationType: string;
+ rootURL: string;
+ apiCacheHardExpires: number;
+ apiCacheSoftExpires: number;
+};
diff --git a/tests/incremental-json-api/app/helpers/.gitkeep b/tests/incremental-json-api/app/helpers/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/app/helpers/add.ts b/tests/incremental-json-api/app/helpers/add.ts
new file mode 100644
index 00000000000..b92ce9fdf47
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/add.ts
@@ -0,0 +1,3 @@
+export default function add(a: number, b: number): number {
+ return a + b;
+}
diff --git a/tests/incremental-json-api/app/helpers/and.ts b/tests/incremental-json-api/app/helpers/and.ts
new file mode 100644
index 00000000000..66aa85a7926
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/and.ts
@@ -0,0 +1,3 @@
+export default function and(...args: unknown[]): boolean {
+ return args.every(Boolean);
+}
diff --git a/tests/incremental-json-api/app/helpers/eq.ts b/tests/incremental-json-api/app/helpers/eq.ts
new file mode 100644
index 00000000000..1a0b08e0604
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/eq.ts
@@ -0,0 +1,3 @@
+export default function eq(a: unknown, b: unknown) {
+ return a === b;
+}
diff --git a/tests/incremental-json-api/app/helpers/gt.ts b/tests/incremental-json-api/app/helpers/gt.ts
new file mode 100644
index 00000000000..3f355ea2657
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/gt.ts
@@ -0,0 +1,3 @@
+export default function gt(a: number, b: number): boolean {
+ return a > b;
+}
diff --git a/tests/incremental-json-api/app/helpers/lt.ts b/tests/incremental-json-api/app/helpers/lt.ts
new file mode 100644
index 00000000000..9d0413c66ba
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/lt.ts
@@ -0,0 +1,3 @@
+export default function lt(a: number, b: number): boolean {
+ return a < b;
+}
diff --git a/tests/incremental-json-api/app/helpers/mod.ts b/tests/incremental-json-api/app/helpers/mod.ts
new file mode 100644
index 00000000000..5433ff98bec
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/mod.ts
@@ -0,0 +1,3 @@
+export default function mod(value: number, div: number): boolean {
+ return value % div === div - 1;
+}
diff --git a/tests/incremental-json-api/app/helpers/neq.ts b/tests/incremental-json-api/app/helpers/neq.ts
new file mode 100644
index 00000000000..eaf69a9237a
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/neq.ts
@@ -0,0 +1,3 @@
+export default function neq(compare: unknown, ...values: unknown[]): boolean {
+ return !values.some((value) => compare === value);
+}
diff --git a/tests/incremental-json-api/app/helpers/not.ts b/tests/incremental-json-api/app/helpers/not.ts
new file mode 100644
index 00000000000..b21b8ae052d
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/not.ts
@@ -0,0 +1,3 @@
+export default function not(value: unknown): boolean {
+ return !value;
+}
diff --git a/tests/incremental-json-api/app/helpers/or.ts b/tests/incremental-json-api/app/helpers/or.ts
new file mode 100644
index 00000000000..cd09479e5e7
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/or.ts
@@ -0,0 +1,3 @@
+export default function or(a: unknown, b: unknown): boolean {
+ return Boolean(a || b);
+}
diff --git a/tests/incremental-json-api/app/helpers/sub.ts b/tests/incremental-json-api/app/helpers/sub.ts
new file mode 100644
index 00000000000..e0c515fd619
--- /dev/null
+++ b/tests/incremental-json-api/app/helpers/sub.ts
@@ -0,0 +1,3 @@
+export default function sub(a: number, b: number): number {
+ return a - b;
+}
diff --git a/tests/incremental-json-api/app/index.html b/tests/incremental-json-api/app/index.html
new file mode 100644
index 00000000000..19bd3b1cc86
--- /dev/null
+++ b/tests/incremental-json-api/app/index.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+ EmberData JSON:API Incremental Setup
+
+
+
+ {{content-for "head"}}
+
+
+
+
+ {{content-for "head-footer"}}
+
+
+ {{content-for "body"}}
+
+
+
+
+ {{content-for "body-footer"}}
+
+
diff --git a/tests/incremental-json-api/app/models/.gitkeep b/tests/incremental-json-api/app/models/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/app/models/author.ts b/tests/incremental-json-api/app/models/author.ts
new file mode 100644
index 00000000000..9a41194e7b9
--- /dev/null
+++ b/tests/incremental-json-api/app/models/author.ts
@@ -0,0 +1,5 @@
+import Model, { attr } from '@ember-data/model';
+
+export default class Author extends Model {
+ @attr declare name: string;
+}
diff --git a/tests/incremental-json-api/app/models/book.ts b/tests/incremental-json-api/app/models/book.ts
new file mode 100644
index 00000000000..b1044c5d710
--- /dev/null
+++ b/tests/incremental-json-api/app/models/book.ts
@@ -0,0 +1,9 @@
+import Model, { attr } from '@ember-data/model';
+
+export default class Book extends Model {
+ @attr declare title: string;
+ @attr declare isbn: string;
+ @attr declare publicationDate: string;
+ @attr declare author: string;
+ @attr declare genre: string;
+}
diff --git a/tests/incremental-json-api/app/models/genre.ts b/tests/incremental-json-api/app/models/genre.ts
new file mode 100644
index 00000000000..f454f428fc1
--- /dev/null
+++ b/tests/incremental-json-api/app/models/genre.ts
@@ -0,0 +1,5 @@
+import Model, { attr } from '@ember-data/model';
+
+export default class Genre extends Model {
+ @attr declare name: string;
+}
diff --git a/tests/incremental-json-api/app/resolver.ts b/tests/incremental-json-api/app/resolver.ts
new file mode 100644
index 00000000000..2fb563d6c04
--- /dev/null
+++ b/tests/incremental-json-api/app/resolver.ts
@@ -0,0 +1,3 @@
+import Resolver from 'ember-resolver';
+
+export default Resolver;
diff --git a/tests/incremental-json-api/app/router.ts b/tests/incremental-json-api/app/router.ts
new file mode 100644
index 00000000000..7525f056ab3
--- /dev/null
+++ b/tests/incremental-json-api/app/router.ts
@@ -0,0 +1,12 @@
+import EmberRouter from '@ember/routing/router';
+
+import config from './config/environment';
+
+const Router = EmberRouter.extend({
+ location: config.locationType,
+ rootURL: config.rootURL,
+});
+
+Router.map(function () {});
+
+export default Router;
diff --git a/tests/incremental-json-api/app/routes/.gitkeep b/tests/incremental-json-api/app/routes/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/app/routes/application.ts b/tests/incremental-json-api/app/routes/application.ts
new file mode 100644
index 00000000000..8f630f67773
--- /dev/null
+++ b/tests/incremental-json-api/app/routes/application.ts
@@ -0,0 +1,33 @@
+import Route from '@ember/routing/route';
+import { service } from '@ember/service';
+
+import { query } from '@ember-data/json-api/request';
+import { setBuildURLConfig } from '@ember-data/request-utils';
+import type Store from '@ember-data/store';
+import type { Document } from '@ember-data/store/-private/document';
+
+import type Author from '../models/author';
+import type Book from '../models/book';
+import type Genre from '../models/genre';
+
+setBuildURLConfig({
+ host: '/',
+ namespace: 'api',
+});
+
+export default class ApplicationRoute extends Route {
+ @service declare store: Store;
+
+ override async model() {
+ const genres = this.store.request>({ url: '/api/books/genres' });
+ const authors = this.store.request>({ url: '/api/books/authors' });
+ const books = this.store.request>(query('book'));
+
+ const data = await Promise.all([genres, authors, books]);
+ return {
+ genres: data[0].content.data!,
+ authors: data[1].content.data!,
+ allBooks: data[2].content,
+ };
+ }
+}
diff --git a/tests/incremental-json-api/app/services/store.ts b/tests/incremental-json-api/app/services/store.ts
new file mode 100644
index 00000000000..8e137da4dae
--- /dev/null
+++ b/tests/incremental-json-api/app/services/store.ts
@@ -0,0 +1,46 @@
+import JSONAPICache from '@ember-data/json-api';
+import type Model from '@ember-data/model';
+import { instantiateRecord, teardownRecord } from '@ember-data/model';
+import { buildSchema, modelFor } from '@ember-data/model/hooks';
+import RequestManager from '@ember-data/request';
+import Fetch from '@ember-data/request/fetch';
+import { LifetimesService } from '@ember-data/request-utils';
+import DataStore, { CacheHandler } from '@ember-data/store';
+import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper';
+import type { StableRecordIdentifier } from '@warp-drive/core-types';
+import type { Cache } from '@warp-drive/core-types/cache';
+
+import CONFIG from '../config/environment';
+
+export default class Store extends DataStore {
+ constructor(args: unknown) {
+ super(args);
+
+ const manager = (this.requestManager = new RequestManager());
+ manager.use([Fetch]);
+ manager.useCache(CacheHandler);
+
+ this.registerSchema(buildSchema(this));
+ this.lifetimes = new LifetimesService(CONFIG);
+ }
+
+ override createCache(capabilities: CacheCapabilitiesManager): Cache {
+ return new JSONAPICache(capabilities);
+ }
+
+ override instantiateRecord(
+ identifier: StableRecordIdentifier,
+ createRecordArgs: { [key: string]: unknown }
+ ): unknown {
+ return instantiateRecord.call(this, identifier, createRecordArgs);
+ }
+
+ override teardownRecord(record: Model): void {
+ return teardownRecord.call(this, record);
+ }
+
+ // @ts-expect-error Not sure what the fix is here
+ override modelFor(type: string) {
+ return modelFor.call(this, type);
+ }
+}
diff --git a/tests/incremental-json-api/app/styles/app.css b/tests/incremental-json-api/app/styles/app.css
new file mode 100644
index 00000000000..2a6e998649a
--- /dev/null
+++ b/tests/incremental-json-api/app/styles/app.css
@@ -0,0 +1,56 @@
+html {
+ font-size: 12px;
+ background-color: antiquewhite;
+ font-family:
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ "Open Sans",
+ "Helvetica Neue",
+ sans-serif;
+}
+
+table {
+ margin: 0.5rem;
+}
+
+table td {
+ padding: 0.5rem;
+ vertical-align: top;
+}
+
+button.active {
+ background-color: cyan;
+ border-radius: 3px;
+}
+
+.scroll-container {
+ height: 75vh;
+ overflow-y: scroll;
+ border: 1px solid black;
+ padding: 0.25rem;
+ position: relative;
+}
+
+.scroll-container ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+ display: block;
+ min-height: 100%;
+}
+
+.scroll-container ul li {
+ padding: 0.5rem 0;
+ border-bottom: 1px dashed grey;
+}
+
+.scroll-container ul li:nth-of-type(even) {
+ background-color: #eee;
+}
diff --git a/tests/incremental-json-api/app/templates/.gitkeep b/tests/incremental-json-api/app/templates/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/app/templates/application.hbs b/tests/incremental-json-api/app/templates/application.hbs
new file mode 100644
index 00000000000..dd4c468197e
--- /dev/null
+++ b/tests/incremental-json-api/app/templates/application.hbs
@@ -0,0 +1,18 @@
+{{page-title "Library"}}
+
+
+
+
+
+ Browse
+
+
+
+
+ Search
+ All Books
+
+
+
+
+{{outlet}}
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/utils/pagination-links.ts b/tests/incremental-json-api/app/utils/pagination-links.ts
new file mode 100644
index 00000000000..419db283fb2
--- /dev/null
+++ b/tests/incremental-json-api/app/utils/pagination-links.ts
@@ -0,0 +1,69 @@
+import { assert } from '@ember/debug';
+import { tracked } from '@glimmer/tracking';
+
+type ApiMeta = {
+ currentPage: number;
+ pagesTotal: number;
+};
+type ApiLinks = {
+ self: string;
+ first: string;
+ last: string;
+ prev: string | null;
+ next: string | null;
+};
+
+export type ApiPage = {
+ meta: ApiMeta;
+ links: ApiLinks;
+};
+
+export class PaginationLinks {
+ declare _pages: string[];
+ @tracked declare pages: string[];
+
+ addPage(page: ApiPage) {
+ let { _pages } = this;
+ const { pagesTotal, currentPage } = page.meta;
+
+ if (currentPage === 1 && (!_pages || _pages[0] !== page.links.self)) {
+ _pages = this._pages = new Array(pagesTotal).fill('.') as string[];
+ } else if (pagesTotal !== _pages.length) {
+ const cached = _pages;
+ _pages = this._pages = new Array(pagesTotal).fill('.') as string[];
+ for (let i = 0; i < pagesTotal; i++) {
+ _pages[i] = cached[i]!;
+ }
+ }
+ const pages = _pages;
+
+ pages[currentPage - 1] = page.links.self;
+
+ pages[0] = page.links.first;
+ pages[pagesTotal - 1] = page.links.last;
+ if (pagesTotal > 1 && currentPage > 1) {
+ assert('previous page should exist', page.links.prev);
+ pages[currentPage - 2] = page.links.prev;
+ }
+ if (pagesTotal > 1 && currentPage < pagesTotal - 1) {
+ assert('next page should exist', page.links.next);
+ pages[currentPage] = page.links.next;
+ }
+
+ this.pages = pages;
+ }
+
+ get filteredPages() {
+ const { pages } = this;
+ const filtered: { index: number; link: string }[] = [];
+
+ for (let i = 0; i < pages.length; i++) {
+ if (pages[i] !== '.') {
+ filtered.push({ index: i + 1, link: pages[i] });
+ } else if (filtered.length > 0 && filtered[filtered.length - 1]!.link !== '...') {
+ filtered.push({ index: i + 1, link: '...' });
+ }
+ }
+ return filtered;
+ }
+}
diff --git a/tests/incremental-json-api/config/environment.js b/tests/incremental-json-api/config/environment.js
new file mode 100644
index 00000000000..ee79827adab
--- /dev/null
+++ b/tests/incremental-json-api/config/environment.js
@@ -0,0 +1,49 @@
+'use strict';
+
+module.exports = function (environment) {
+ const ENV = {
+ modulePrefix: 'incremental-json-api',
+ environment,
+ rootURL: '/',
+ locationType: 'history',
+ apiCacheHardExpires: 10_000, // 120_000, // 2 minutes
+ apiCacheSoftExpires: 5_000, // 30_000, // 30 seconds
+ EmberENV: {
+ FEATURES: {
+ // Here you can enable experimental features on an ember canary build
+ // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true
+ },
+ },
+
+ APP: {
+ // Here you can pass flags/options to your application instance
+ // when it is created
+ },
+ };
+
+ if (environment === 'development') {
+ // ENV.APP.LOG_RESOLVER = true;
+ // ENV.APP.LOG_ACTIVE_GENERATION = true;
+ // ENV.APP.LOG_TRANSITIONS = true;
+ // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
+ // ENV.APP.LOG_VIEW_LOOKUPS = true;
+ }
+
+ if (environment === 'test') {
+ // Testem prefers this...
+ ENV.locationType = 'none';
+
+ // keep test console output quieter
+ ENV.APP.LOG_ACTIVE_GENERATION = false;
+ ENV.APP.LOG_VIEW_LOOKUPS = false;
+
+ ENV.APP.rootElement = '#ember-testing';
+ ENV.APP.autoboot = false;
+ }
+
+ if (environment === 'production') {
+ // here you can enable a production-specific feature
+ }
+
+ return ENV;
+};
diff --git a/tests/incremental-json-api/config/optional-features.json b/tests/incremental-json-api/config/optional-features.json
new file mode 100644
index 00000000000..b26286e2ecd
--- /dev/null
+++ b/tests/incremental-json-api/config/optional-features.json
@@ -0,0 +1,6 @@
+{
+ "application-template-wrapper": false,
+ "default-async-observers": true,
+ "jquery-integration": false,
+ "template-only-glimmer-components": true
+}
diff --git a/tests/incremental-json-api/config/targets.js b/tests/incremental-json-api/config/targets.js
new file mode 100644
index 00000000000..b6756da2517
--- /dev/null
+++ b/tests/incremental-json-api/config/targets.js
@@ -0,0 +1,13 @@
+'use strict';
+
+let browsers = ['last 1 Chrome versions', 'last 1 Firefox versions', 'last 1 Safari versions'];
+const isProd = process.env.EMBER_ENV === 'production';
+
+if (isProd) {
+ browsers = ['last 2 Chrome versions', 'last 2 Firefox versions', 'Safari 12', 'last 2 Edge versions'];
+}
+
+module.exports = {
+ browsers,
+ node: 'current',
+};
diff --git a/tests/incremental-json-api/ember-cli-build.js b/tests/incremental-json-api/ember-cli-build.js
new file mode 100644
index 00000000000..e6790e9743c
--- /dev/null
+++ b/tests/incremental-json-api/ember-cli-build.js
@@ -0,0 +1,40 @@
+'use strict';
+
+const EmberApp = require('ember-cli/lib/broccoli/ember-app');
+
+module.exports = function (defaults) {
+ const app = new EmberApp(defaults, {
+ emberData: {
+ compatWith: '99.0',
+ },
+ babel: {
+ // this ensures that the same build-time code stripping that is done
+ // for library packages is also done for our tests and dummy app
+ plugins: [
+ ...require('@ember-data/private-build-infra/src/debug-macros')({
+ compatWith: '99.0',
+ debug: {},
+ features: {},
+ deprecations: {},
+ env: require('@ember-data/private-build-infra/src/utilities/get-env')(),
+ }),
+ ],
+ },
+ 'ember-cli-babel': {
+ throwUnlessParallelizable: true,
+ enableTypeScriptTransform: true,
+ },
+ 'ember-cli-terser': {
+ exclude: ['assets/dummy.js', 'assets/tests.js', 'assets/test-support.js'],
+ },
+ });
+
+ const { Webpack } = require('@embroider/webpack');
+ return require('@embroider/compat').compatBuild(app, Webpack, {
+ skipBabel: [
+ {
+ package: 'qunit',
+ },
+ ],
+ });
+};
diff --git a/tests/incremental-json-api/package.json b/tests/incremental-json-api/package.json
new file mode 100644
index 00000000000..77a5dab9baf
--- /dev/null
+++ b/tests/incremental-json-api/package.json
@@ -0,0 +1,143 @@
+{
+ "name": "incremental-json-api",
+ "version": "5.4.0-alpha.43",
+ "private": true,
+ "description": "Demos the incremental adoption of new EmberData for JSON:API",
+ "keywords": [],
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com:emberjs/data.git",
+ "directory": "tests/incremental-json-api"
+ },
+ "license": "MIT",
+ "author": "",
+ "directories": {
+ "test": "tests"
+ },
+ "scripts": {
+ "build": "ember build",
+ "start": "ember test --port=0 --serve --no-launch",
+ "lint": "eslint . --quiet --cache --cache-strategy=content --ext .js,.ts,.mjs,.cjs --report-unused-disable-directives",
+ "check:types": "tsc --noEmit",
+ "test:examples": "ember test --test-port=0",
+ "_syncPnpm": "bun run sync-dependencies-meta-injected"
+ },
+ "dependenciesMeta": {
+ "ember-data": {
+ "injected": true
+ },
+ "@ember-data/json-api": {
+ "injected": true
+ },
+ "@ember-data/graph": {
+ "injected": true
+ },
+ "@ember-data/private-build-infra": {
+ "injected": true
+ },
+ "@ember-data/store": {
+ "injected": true
+ },
+ "@ember-data/model": {
+ "injected": true
+ },
+ "@ember-data/legacy-compat": {
+ "injected": true
+ },
+ "@ember-data/request": {
+ "injected": true
+ },
+ "@ember-data/request-utils": {
+ "injected": true
+ },
+ "@ember-data/tracking": {
+ "injected": true
+ },
+ "@ember-data/unpublished-test-infra": {
+ "injected": true
+ },
+ "@warp-drive/core-types": {
+ "injected": true
+ },
+ "@ember/string": {
+ "injected": true
+ },
+ "ember-inflector": {
+ "injected": true
+ },
+ "@ember-data/debug": {
+ "injected": true
+ }
+ },
+ "devDependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/runtime": "^7.23.9",
+ "@ember-data/debug": "workspace:5.4.0-alpha.43",
+ "@ember-data/graph": "workspace:5.4.0-alpha.43",
+ "@ember-data/json-api": "workspace:5.4.0-alpha.43",
+ "@ember-data/legacy-compat": "workspace:5.4.0-alpha.43",
+ "@ember-data/model": "workspace:5.4.0-alpha.43",
+ "@ember-data/private-build-infra": "workspace:5.4.0-alpha.43",
+ "@ember-data/request": "workspace:5.4.0-alpha.43",
+ "@ember-data/request-utils": "workspace:5.4.0-alpha.43",
+ "@ember-data/store": "workspace:5.4.0-alpha.43",
+ "@ember-data/tracking": "workspace:5.4.0-alpha.43",
+ "@ember-data/unpublished-test-infra": "workspace:5.4.0-alpha.43",
+ "@ember/edition-utils": "^1.2.0",
+ "@ember/optional-features": "^2.0.0",
+ "@ember/string": "3.1.1",
+ "@ember/test-helpers": "^3.2.1",
+ "@embroider/compat": "^3.4.0",
+ "@embroider/core": "^3.4.2",
+ "@embroider/webpack": "^3.2.1",
+ "@glimmer/component": "^1.1.2",
+ "@glimmer/tracking": "^1.1.2",
+ "@html-next/vertical-collection": "^4.0.2",
+ "@types/morgan": "^1.9.9",
+ "@warp-drive/core-types": "workspace:0.0.0-alpha.29",
+ "@warp-drive/internal-config": "workspace:5.4.0-alpha.43",
+ "ember-auto-import": "^2.7.0",
+ "ember-cli": "~5.4.1",
+ "ember-cli-babel": "^8.2.0",
+ "ember-cli-dependency-checker": "^3.3.2",
+ "ember-cli-htmlbars": "^6.3.0",
+ "ember-cli-inject-live-reload": "^2.1.0",
+ "ember-cli-sri": "^2.1.1",
+ "ember-cli-terser": "~4.0.2",
+ "ember-cli-test-loader": "^3.1.0",
+ "ember-data": "workspace:5.4.0-alpha.43",
+ "ember-disable-prototype-extensions": "^1.1.3",
+ "ember-inflector": "^4.0.2",
+ "ember-load-initializers": "^2.1.2",
+ "ember-maybe-import-regenerator": "^1.0.0",
+ "ember-page-title": "^8.2.2",
+ "ember-qunit": "^8.0.2",
+ "ember-resolver": "^11.0.1",
+ "ember-source": "~5.6.0",
+ "ember-source-channel-url": "^3.0.0",
+ "ember-try": "^3.0.0",
+ "express": "^4.18.2",
+ "glob": "^10.3.10",
+ "loader.js": "^4.7.0",
+ "morgan": "^1.10.0",
+ "qunit": "^2.20.0",
+ "qunit-console-grouper": "^0.3.0",
+ "qunit-dom": "^3.0.0",
+ "silent-error": "^1.1.1",
+ "typescript": "^5.3.3",
+ "webpack": "^5.89.0"
+ },
+ "ember": {
+ "edition": "octane"
+ },
+ "engines": {
+ "node": ">= 18.19.1"
+ },
+ "volta": {
+ "extends": "../../package.json"
+ },
+ "packageManager": "pnpm@8.6.0",
+ "dependencies": {
+ "pnpm-sync-dependencies-meta-injected": "0.0.10"
+ }
+}
diff --git a/tests/incremental-json-api/server/index.js b/tests/incremental-json-api/server/index.js
new file mode 100644
index 00000000000..f28263c054f
--- /dev/null
+++ b/tests/incremental-json-api/server/index.js
@@ -0,0 +1,34 @@
+'use strict';
+
+// To use it create some files under `mocks/`
+// e.g. `server/mocks/ember-hamsters.js`
+//
+// module.exports = function(app) {
+// app.get('/ember-hamsters', function(req, res) {
+// res.send('hello');
+// });
+// };
+
+module.exports = function (app) {
+ // eslint-disable-next-line no-console
+ console.log(`\n\n\t💎 mounting mock server\n\n`);
+ let mocks;
+ try {
+ const globSync = require('glob').sync;
+ const path = require('node:path');
+ mocks = globSync('./mocks/**/*.js', { cwd: __dirname }).map((p) => {
+ const realPath = path.join(__dirname, p);
+ return require(realPath);
+ });
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.error(e);
+ return;
+ }
+
+ // Log proxy requests
+ const morgan = require('morgan');
+ app.use(morgan('dev'));
+
+ mocks.forEach((route) => route(app));
+};
diff --git a/tests/incremental-json-api/server/mocks/MOCK_DATA.json b/tests/incremental-json-api/server/mocks/MOCK_DATA.json
new file mode 100644
index 00000000000..6be4939924c
--- /dev/null
+++ b/tests/incremental-json-api/server/mocks/MOCK_DATA.json
@@ -0,0 +1,1000 @@
+[{"title":"seize 24/365 infrastructures","author":"Ernest Hemingway","isbn":"644635085-6","publicationDate":"11/28/1985","genre":"mystery","price":741.0},
+{"title":"incentivize one-to-one partnerships","author":"Stephen King","isbn":"243751578-X","publicationDate":"10/3/1953","genre":"non-fiction","price":292.88},
+{"title":"iterate world-class content","author":"Stephen King","isbn":"531605726-0","publicationDate":"12/11/1915","genre":"non-fiction","price":386.91},
+{"title":"unleash cross-platform e-business","author":"Jane Austen","isbn":"976188165-2","publicationDate":"8/22/1975","genre":"non-fiction","price":253.72},
+{"title":"harness vertical applications","author":"Ernest Hemingway","isbn":"116806258-6","publicationDate":"4/6/1939","genre":"fiction","price":108.29},
+{"title":"reinvent global metrics","author":"Stephen King","isbn":"360811592-7","publicationDate":"1/26/1963","genre":"romance","price":686.1},
+{"title":"transition impactful systems","author":"Stephen King","isbn":"964265205-6","publicationDate":"10/2/1912","genre":"science fiction","price":836.58},
+{"title":"leverage visionary eyeballs","author":"Alexander Dumas","isbn":"866069372-8","publicationDate":"10/1/1998","genre":"romance","price":890.41},
+{"title":"brand turn-key interfaces","author":"Jane Austen","isbn":"271189769-9","publicationDate":"4/12/2022","genre":"mystery","price":494.81},
+{"title":"embrace granular technologies","author":"Agatha Christie","isbn":"848671944-5","publicationDate":"10/12/1947","genre":"romance","price":902.53},
+{"title":"morph cross-platform networks","author":"Alexander Dumas","isbn":"450914241-2","publicationDate":"3/5/1929","genre":"fiction","price":201.5},
+{"title":"revolutionize back-end models","author":"Ernest Hemingway","isbn":"080230007-3","publicationDate":"2/16/1962","genre":"non-fiction","price":995.71},
+{"title":"grow value-added web-readiness","author":"George Orwell","isbn":"311498971-3","publicationDate":"9/28/1946","genre":"mystery","price":829.33},
+{"title":"deploy transparent schemas","author":"Alexander Dumas","isbn":"335119119-7","publicationDate":"5/17/1933","genre":"science fiction","price":91.43},
+{"title":"redefine B2C experiences","author":"George Orwell","isbn":"402492785-X","publicationDate":"6/10/1915","genre":"science fiction","price":144.54},
+{"title":"redefine impactful relationships","author":"Alexander Dumas","isbn":"031309970-7","publicationDate":"9/6/1944","genre":"mystery","price":407.1},
+{"title":"reinvent wireless niches","author":"J. R. R. Tolkein","isbn":"495575876-2","publicationDate":"12/8/1971","genre":"fiction","price":685.73},
+{"title":"redefine magnetic channels","author":"George Orwell","isbn":"800152723-9","publicationDate":"7/12/1910","genre":"science fiction","price":914.23},
+{"title":"incubate seamless web-readiness","author":"Alexander Dumas","isbn":"215737092-7","publicationDate":"11/16/2003","genre":"romance","price":628.7},
+{"title":"facilitate frictionless eyeballs","author":"Jane Austen","isbn":"190237904-7","publicationDate":"1/22/2007","genre":"technology","price":305.93},
+{"title":"streamline viral mindshare","author":"Alexander Dumas","isbn":"045058831-9","publicationDate":"7/2/1909","genre":"non-fiction","price":690.09},
+{"title":"facilitate extensible paradigms","author":"Stephen King","isbn":"638815525-1","publicationDate":"11/8/2004","genre":"technology","price":570.13},
+{"title":"monetize global action-items","author":"Agatha Christie","isbn":"482213966-2","publicationDate":"10/31/1977","genre":"fiction","price":632.86},
+{"title":"optimize plug-and-play deliverables","author":"Ernest Hemingway","isbn":"508548921-7","publicationDate":"11/12/1950","genre":"non-fiction","price":779.21},
+{"title":"integrate real-time deliverables","author":"Agatha Christie","isbn":"317377843-X","publicationDate":"12/5/1928","genre":"science fiction","price":132.42},
+{"title":"visualize visionary vortals","author":"Jane Austen","isbn":"650632210-1","publicationDate":"1/19/1911","genre":"technology","price":731.46},
+{"title":"productize efficient infomediaries","author":"Alexander Dumas","isbn":"685065587-6","publicationDate":"7/30/2007","genre":"science fiction","price":163.27},
+{"title":"morph front-end schemas","author":"Jane Austen","isbn":"595535620-7","publicationDate":"11/25/1989","genre":"fiction","price":336.54},
+{"title":"matrix sticky technologies","author":"George Orwell","isbn":"180719124-9","publicationDate":"11/22/1930","genre":"mystery","price":613.88},
+{"title":"reinvent mission-critical e-services","author":"Agatha Christie","isbn":"506048306-1","publicationDate":"1/30/1946","genre":"fiction","price":996.93},
+{"title":"repurpose distributed infrastructures","author":"Alexander Dumas","isbn":"681815393-3","publicationDate":"2/7/1976","genre":"mystery","price":815.47},
+{"title":"redefine real-time markets","author":"Agatha Christie","isbn":"960128077-4","publicationDate":"9/22/2002","genre":"romance","price":632.99},
+{"title":"exploit synergistic applications","author":"George Orwell","isbn":"382331189-1","publicationDate":"12/24/1938","genre":"romance","price":332.87},
+{"title":"facilitate clicks-and-mortar e-markets","author":"J. R. R. Tolkein","isbn":"485971685-X","publicationDate":"8/28/1962","genre":"technology","price":946.68},
+{"title":"strategize magnetic action-items","author":"Stephen King","isbn":"607349444-0","publicationDate":"5/31/1914","genre":"non-fiction","price":90.79},
+{"title":"extend granular models","author":"J. R. R. Tolkein","isbn":"918291437-0","publicationDate":"1/8/1977","genre":"fiction","price":244.07},
+{"title":"leverage viral channels","author":"Stephen King","isbn":"714222845-8","publicationDate":"6/23/1954","genre":"mystery","price":44.13},
+{"title":"brand one-to-one convergence","author":"Stephen King","isbn":"454016456-2","publicationDate":"10/4/2016","genre":"mystery","price":45.87},
+{"title":"iterate end-to-end e-services","author":"Jane Austen","isbn":"633971656-3","publicationDate":"2/16/1906","genre":"fiction","price":841.34},
+{"title":"transition next-generation e-tailers","author":"Mark Twain","isbn":"575204282-8","publicationDate":"4/13/1933","genre":"technology","price":80.75},
+{"title":"transform front-end convergence","author":"Alexander Dumas","isbn":"462076505-8","publicationDate":"9/18/1919","genre":"science fiction","price":861.68},
+{"title":"implement e-business e-markets","author":"Ernest Hemingway","isbn":"664881558-2","publicationDate":"3/2/2001","genre":"romance","price":729.01},
+{"title":"syndicate bleeding-edge e-commerce","author":"Stephen King","isbn":"407305865-7","publicationDate":"2/19/1942","genre":"fiction","price":689.46},
+{"title":"architect plug-and-play systems","author":"Agatha Christie","isbn":"990813514-7","publicationDate":"9/2/1928","genre":"technology","price":627.8},
+{"title":"matrix open-source channels","author":"Agatha Christie","isbn":"065663575-4","publicationDate":"9/22/1934","genre":"fiction","price":586.23},
+{"title":"exploit ubiquitous niches","author":"Jane Austen","isbn":"069544382-8","publicationDate":"9/18/1934","genre":"technology","price":127.54},
+{"title":"utilize web-enabled technologies","author":"Stephen King","isbn":"676027605-1","publicationDate":"2/13/2005","genre":"fiction","price":928.27},
+{"title":"monetize leading-edge bandwidth","author":"Jane Austen","isbn":"134633403-X","publicationDate":"10/24/1937","genre":"fiction","price":224.73},
+{"title":"e-enable B2B schemas","author":"Ernest Hemingway","isbn":"052162397-9","publicationDate":"8/25/1968","genre":"science fiction","price":164.44},
+{"title":"cultivate mission-critical models","author":"Stephen King","isbn":"777522951-9","publicationDate":"12/11/1984","genre":"fiction","price":13.03},
+{"title":"grow ubiquitous action-items","author":"Jane Austen","isbn":"881515324-1","publicationDate":"2/6/1912","genre":"romance","price":165.69},
+{"title":"utilize rich action-items","author":"Agatha Christie","isbn":"834271908-1","publicationDate":"12/3/2020","genre":"mystery","price":977.81},
+{"title":"reinvent one-to-one metrics","author":"J. R. R. Tolkein","isbn":"593171002-7","publicationDate":"1/27/2006","genre":"mystery","price":721.92},
+{"title":"transform out-of-the-box web services","author":"Ernest Hemingway","isbn":"391170155-1","publicationDate":"4/4/2001","genre":"fiction","price":481.12},
+{"title":"innovate frictionless markets","author":"Mark Twain","isbn":"833054470-2","publicationDate":"12/15/1970","genre":"science fiction","price":44.5},
+{"title":"harness best-of-breed architectures","author":"Stephen King","isbn":"603388299-7","publicationDate":"3/30/1934","genre":"fiction","price":145.5},
+{"title":"scale efficient synergies","author":"Jane Austen","isbn":"247843077-0","publicationDate":"7/30/1973","genre":"technology","price":15.3},
+{"title":"whiteboard intuitive e-business","author":"Jane Austen","isbn":"135385242-3","publicationDate":"6/18/1903","genre":"non-fiction","price":165.44},
+{"title":"target clicks-and-mortar platforms","author":"Mark Twain","isbn":"292297816-8","publicationDate":"4/25/1987","genre":"science fiction","price":454.98},
+{"title":"incubate granular e-business","author":"Mark Twain","isbn":"579680762-5","publicationDate":"7/1/1959","genre":"mystery","price":109.42},
+{"title":"optimize best-of-breed synergies","author":"Jane Austen","isbn":"921990873-5","publicationDate":"3/16/1992","genre":"mystery","price":739.41},
+{"title":"unleash web-enabled communities","author":"Jane Austen","isbn":"772000304-7","publicationDate":"5/25/1931","genre":"mystery","price":52.36},
+{"title":"aggregate plug-and-play niches","author":"Agatha Christie","isbn":"332631152-4","publicationDate":"12/5/1963","genre":"mystery","price":18.29},
+{"title":"e-enable wireless models","author":"George Orwell","isbn":"807749587-7","publicationDate":"3/13/2015","genre":"fiction","price":907.54},
+{"title":"matrix enterprise web-readiness","author":"Stephen King","isbn":"487649923-3","publicationDate":"7/28/1941","genre":"mystery","price":163.18},
+{"title":"strategize user-centric infomediaries","author":"Ernest Hemingway","isbn":"185993052-2","publicationDate":"5/18/1956","genre":"fiction","price":10.6},
+{"title":"enable value-added interfaces","author":"Jane Austen","isbn":"527507351-8","publicationDate":"6/16/1974","genre":"science fiction","price":276.92},
+{"title":"whiteboard synergistic e-tailers","author":"Agatha Christie","isbn":"258106503-6","publicationDate":"6/10/1930","genre":"technology","price":271.54},
+{"title":"drive world-class markets","author":"Agatha Christie","isbn":"523743214-X","publicationDate":"9/9/1997","genre":"mystery","price":270.06},
+{"title":"grow global supply-chains","author":"Alexander Dumas","isbn":"658363842-8","publicationDate":"9/21/1960","genre":"fiction","price":731.33},
+{"title":"aggregate viral initiatives","author":"Mark Twain","isbn":"746435642-X","publicationDate":"10/15/1998","genre":"science fiction","price":419.02},
+{"title":"reinvent frictionless web services","author":"Ernest Hemingway","isbn":"748876702-0","publicationDate":"1/13/2002","genre":"technology","price":710.67},
+{"title":"target bleeding-edge bandwidth","author":"Mark Twain","isbn":"361045710-4","publicationDate":"12/7/1979","genre":"science fiction","price":356.84},
+{"title":"leverage 24/365 markets","author":"Mark Twain","isbn":"043590327-6","publicationDate":"2/3/1943","genre":"technology","price":794.77},
+{"title":"redefine rich markets","author":"Jane Austen","isbn":"620084977-3","publicationDate":"3/28/1997","genre":"non-fiction","price":677.12},
+{"title":"disintermediate sexy interfaces","author":"Jane Austen","isbn":"193354560-7","publicationDate":"9/29/1915","genre":"fiction","price":315.45},
+{"title":"enable global e-tailers","author":"Agatha Christie","isbn":"337821803-7","publicationDate":"12/23/1902","genre":"science fiction","price":571.95},
+{"title":"enhance wireless web-readiness","author":"Ernest Hemingway","isbn":"010519237-6","publicationDate":"8/22/1972","genre":"fiction","price":591.45},
+{"title":"revolutionize rich content","author":"Jane Austen","isbn":"333930966-3","publicationDate":"7/28/1972","genre":"mystery","price":330.39},
+{"title":"aggregate impactful systems","author":"Jane Austen","isbn":"339465141-6","publicationDate":"2/26/1963","genre":"science fiction","price":783.48},
+{"title":"aggregate end-to-end schemas","author":"George Orwell","isbn":"875309114-0","publicationDate":"7/5/2015","genre":"non-fiction","price":54.4},
+{"title":"evolve bricks-and-clicks initiatives","author":"George Orwell","isbn":"700040161-3","publicationDate":"6/17/1925","genre":"non-fiction","price":882.47},
+{"title":"monetize frictionless e-services","author":"Agatha Christie","isbn":"142648151-9","publicationDate":"9/4/1989","genre":"romance","price":428.78},
+{"title":"engage viral platforms","author":"J. R. R. Tolkein","isbn":"218468590-9","publicationDate":"12/7/1948","genre":"fiction","price":551.16},
+{"title":"e-enable next-generation applications","author":"Agatha Christie","isbn":"276218452-5","publicationDate":"12/24/1922","genre":"technology","price":994.08},
+{"title":"embrace compelling e-business","author":"George Orwell","isbn":"623429705-6","publicationDate":"4/7/2006","genre":"mystery","price":285.49},
+{"title":"harness bleeding-edge synergies","author":"Mark Twain","isbn":"395118770-0","publicationDate":"10/31/2018","genre":"science fiction","price":613.88},
+{"title":"engineer virtual methodologies","author":"Stephen King","isbn":"789999472-1","publicationDate":"11/13/1918","genre":"fiction","price":887.84},
+{"title":"aggregate end-to-end action-items","author":"Agatha Christie","isbn":"719035965-6","publicationDate":"3/24/1944","genre":"fiction","price":557.45},
+{"title":"expedite intuitive systems","author":"Stephen King","isbn":"775956315-9","publicationDate":"10/24/1923","genre":"science fiction","price":305.46},
+{"title":"embrace value-added applications","author":"George Orwell","isbn":"209039905-8","publicationDate":"8/28/1915","genre":"romance","price":859.13},
+{"title":"reinvent bleeding-edge technologies","author":"Jane Austen","isbn":"165602894-8","publicationDate":"8/21/1959","genre":"technology","price":782.14},
+{"title":"aggregate 24/7 experiences","author":"Agatha Christie","isbn":"410120463-2","publicationDate":"1/2/2006","genre":"non-fiction","price":30.93},
+{"title":"grow sticky systems","author":"J. R. R. Tolkein","isbn":"027988651-9","publicationDate":"9/7/1943","genre":"mystery","price":150.23},
+{"title":"enable holistic solutions","author":"Alexander Dumas","isbn":"512589282-3","publicationDate":"12/6/1924","genre":"fiction","price":620.46},
+{"title":"envisioneer e-business applications","author":"Jane Austen","isbn":"354169854-3","publicationDate":"2/24/1912","genre":"science fiction","price":759.34},
+{"title":"reintermediate open-source experiences","author":"Stephen King","isbn":"781358440-6","publicationDate":"1/2/1905","genre":"romance","price":327.38},
+{"title":"leverage holistic content","author":"Alexander Dumas","isbn":"620805968-2","publicationDate":"9/25/1939","genre":"non-fiction","price":748.84},
+{"title":"envisioneer user-centric schemas","author":"J. R. R. Tolkein","isbn":"549867104-0","publicationDate":"9/25/2002","genre":"romance","price":545.55},
+{"title":"optimize seamless infomediaries","author":"Agatha Christie","isbn":"140302592-4","publicationDate":"12/3/2019","genre":"romance","price":540.5},
+{"title":"repurpose front-end applications","author":"Agatha Christie","isbn":"211265383-0","publicationDate":"8/5/1949","genre":"non-fiction","price":846.0},
+{"title":"synergize impactful users","author":"Alexander Dumas","isbn":"539223162-4","publicationDate":"10/19/1929","genre":"science fiction","price":289.66},
+{"title":"unleash transparent infrastructures","author":"Ernest Hemingway","isbn":"009089183-X","publicationDate":"11/7/1988","genre":"non-fiction","price":157.76},
+{"title":"strategize mission-critical markets","author":"Alexander Dumas","isbn":"656830444-1","publicationDate":"4/12/2020","genre":"technology","price":857.32},
+{"title":"generate ubiquitous metrics","author":"Mark Twain","isbn":"136442005-8","publicationDate":"12/14/2013","genre":"fiction","price":483.16},
+{"title":"benchmark wireless infrastructures","author":"Alexander Dumas","isbn":"110073782-0","publicationDate":"6/30/2021","genre":"technology","price":470.3},
+{"title":"leverage cutting-edge applications","author":"Stephen King","isbn":"242181963-6","publicationDate":"11/14/1963","genre":"fiction","price":976.53},
+{"title":"mesh clicks-and-mortar models","author":"Ernest Hemingway","isbn":"797282987-X","publicationDate":"10/19/1904","genre":"technology","price":219.47},
+{"title":"enable frictionless e-tailers","author":"Stephen King","isbn":"278857249-2","publicationDate":"4/18/1921","genre":"technology","price":193.17},
+{"title":"incentivize magnetic paradigms","author":"Stephen King","isbn":"555504925-0","publicationDate":"8/19/1984","genre":"fiction","price":388.79},
+{"title":"aggregate ubiquitous mindshare","author":"Ernest Hemingway","isbn":"087357577-6","publicationDate":"12/1/2004","genre":"romance","price":253.6},
+{"title":"deliver bricks-and-clicks architectures","author":"Agatha Christie","isbn":"155022309-7","publicationDate":"8/6/1973","genre":"mystery","price":763.57},
+{"title":"benchmark 24/365 infrastructures","author":"George Orwell","isbn":"639657495-0","publicationDate":"1/19/1952","genre":"non-fiction","price":62.74},
+{"title":"reintermediate wireless methodologies","author":"Jane Austen","isbn":"963550363-6","publicationDate":"2/21/2002","genre":"romance","price":778.33},
+{"title":"deliver proactive web-readiness","author":"Mark Twain","isbn":"227838659-X","publicationDate":"10/12/2006","genre":"technology","price":93.41},
+{"title":"disintermediate front-end channels","author":"Jane Austen","isbn":"566892850-0","publicationDate":"3/21/1963","genre":"romance","price":339.27},
+{"title":"visualize distributed portals","author":"Ernest Hemingway","isbn":"517134185-0","publicationDate":"11/20/1947","genre":"fiction","price":907.54},
+{"title":"embrace bleeding-edge vortals","author":"George Orwell","isbn":"670637787-2","publicationDate":"10/28/2004","genre":"mystery","price":673.87},
+{"title":"reintermediate web-enabled mindshare","author":"J. R. R. Tolkein","isbn":"129154745-2","publicationDate":"3/13/1986","genre":"technology","price":610.55},
+{"title":"utilize bleeding-edge architectures","author":"Mark Twain","isbn":"227304089-X","publicationDate":"2/7/2014","genre":"mystery","price":727.24},
+{"title":"disintermediate 24/365 initiatives","author":"J. R. R. Tolkein","isbn":"212084723-1","publicationDate":"3/12/1960","genre":"mystery","price":401.71},
+{"title":"transition viral e-tailers","author":"Ernest Hemingway","isbn":"520023034-9","publicationDate":"9/27/1983","genre":"science fiction","price":32.41},
+{"title":"innovate transparent infomediaries","author":"Agatha Christie","isbn":"377727518-2","publicationDate":"10/24/1919","genre":"non-fiction","price":339.15},
+{"title":"enable interactive applications","author":"Jane Austen","isbn":"975694691-1","publicationDate":"5/23/1935","genre":"fiction","price":791.47},
+{"title":"engage dynamic functionalities","author":"Ernest Hemingway","isbn":"612820139-3","publicationDate":"7/12/2011","genre":"fiction","price":314.79},
+{"title":"iterate one-to-one e-business","author":"George Orwell","isbn":"650884037-1","publicationDate":"12/24/1972","genre":"fiction","price":653.79},
+{"title":"repurpose B2C web services","author":"Mark Twain","isbn":"400775436-5","publicationDate":"3/2/2011","genre":"non-fiction","price":845.99},
+{"title":"iterate e-business architectures","author":"Agatha Christie","isbn":"956427423-0","publicationDate":"10/3/1982","genre":"romance","price":971.06},
+{"title":"integrate value-added bandwidth","author":"J. R. R. Tolkein","isbn":"504488259-3","publicationDate":"9/12/1944","genre":"science fiction","price":190.4},
+{"title":"innovate open-source models","author":"Stephen King","isbn":"832841133-4","publicationDate":"11/2/1916","genre":"fiction","price":524.47},
+{"title":"iterate 24/7 synergies","author":"Agatha Christie","isbn":"905032048-1","publicationDate":"1/30/2006","genre":"romance","price":628.17},
+{"title":"brand wireless paradigms","author":"Agatha Christie","isbn":"697785493-6","publicationDate":"1/14/1935","genre":"technology","price":299.65},
+{"title":"strategize front-end schemas","author":"J. R. R. Tolkein","isbn":"181150043-9","publicationDate":"12/15/1908","genre":"fiction","price":773.0},
+{"title":"redefine visionary action-items","author":"J. R. R. Tolkein","isbn":"256657598-3","publicationDate":"2/1/1963","genre":"mystery","price":214.78},
+{"title":"aggregate web-enabled web-readiness","author":"Alexander Dumas","isbn":"758791244-4","publicationDate":"9/6/1904","genre":"romance","price":379.35},
+{"title":"maximize plug-and-play convergence","author":"J. R. R. Tolkein","isbn":"124432681-X","publicationDate":"4/7/2009","genre":"non-fiction","price":503.93},
+{"title":"disintermediate synergistic channels","author":"Agatha Christie","isbn":"127819378-2","publicationDate":"6/14/1968","genre":"science fiction","price":348.64},
+{"title":"integrate B2B platforms","author":"Ernest Hemingway","isbn":"246291544-3","publicationDate":"5/4/2014","genre":"romance","price":883.29},
+{"title":"incentivize cross-platform convergence","author":"Stephen King","isbn":"572890334-7","publicationDate":"3/8/1977","genre":"science fiction","price":496.29},
+{"title":"envisioneer holistic users","author":"J. R. R. Tolkein","isbn":"407643834-5","publicationDate":"11/11/1932","genre":"science fiction","price":214.05},
+{"title":"matrix synergistic models","author":"Mark Twain","isbn":"206601197-5","publicationDate":"6/25/1903","genre":"romance","price":46.19},
+{"title":"brand next-generation architectures","author":"Agatha Christie","isbn":"583666913-9","publicationDate":"7/22/1903","genre":"fiction","price":343.15},
+{"title":"streamline integrated e-tailers","author":"Stephen King","isbn":"442926162-8","publicationDate":"12/23/1949","genre":"technology","price":878.44},
+{"title":"monetize global e-markets","author":"George Orwell","isbn":"483507865-9","publicationDate":"3/25/1917","genre":"technology","price":489.36},
+{"title":"optimize e-business bandwidth","author":"Alexander Dumas","isbn":"721746546-X","publicationDate":"1/14/1982","genre":"technology","price":838.72},
+{"title":"leverage dot-com ROI","author":"George Orwell","isbn":"492359068-8","publicationDate":"3/7/1915","genre":"science fiction","price":552.55},
+{"title":"implement plug-and-play communities","author":"Stephen King","isbn":"309774521-1","publicationDate":"1/20/1912","genre":"non-fiction","price":136.22},
+{"title":"harness distributed functionalities","author":"Ernest Hemingway","isbn":"961520859-0","publicationDate":"7/7/1918","genre":"non-fiction","price":871.47},
+{"title":"deploy robust functionalities","author":"Stephen King","isbn":"758584641-X","publicationDate":"9/19/1912","genre":"non-fiction","price":699.38},
+{"title":"repurpose web-enabled e-business","author":"Alexander Dumas","isbn":"202038018-8","publicationDate":"7/24/1961","genre":"mystery","price":403.72},
+{"title":"exploit 24/365 systems","author":"Stephen King","isbn":"413469313-6","publicationDate":"11/26/1936","genre":"technology","price":169.26},
+{"title":"enable e-business e-markets","author":"J. R. R. Tolkein","isbn":"143480955-2","publicationDate":"9/21/1912","genre":"non-fiction","price":571.2},
+{"title":"embrace robust e-markets","author":"Stephen King","isbn":"098623064-2","publicationDate":"2/14/1942","genre":"mystery","price":89.96},
+{"title":"innovate dynamic platforms","author":"Stephen King","isbn":"252833405-2","publicationDate":"2/29/2008","genre":"mystery","price":814.31},
+{"title":"whiteboard next-generation e-commerce","author":"George Orwell","isbn":"894034087-6","publicationDate":"6/11/1952","genre":"romance","price":890.14},
+{"title":"seize efficient infrastructures","author":"Jane Austen","isbn":"207727871-4","publicationDate":"1/8/1948","genre":"technology","price":732.77},
+{"title":"generate extensible eyeballs","author":"Alexander Dumas","isbn":"096334884-1","publicationDate":"11/9/1952","genre":"romance","price":936.45},
+{"title":"embrace back-end bandwidth","author":"Stephen King","isbn":"789158176-2","publicationDate":"6/10/1965","genre":"mystery","price":184.15},
+{"title":"reintermediate dot-com bandwidth","author":"Alexander Dumas","isbn":"879599595-1","publicationDate":"7/30/1924","genre":"romance","price":217.39},
+{"title":"expedite holistic interfaces","author":"Agatha Christie","isbn":"557719268-4","publicationDate":"8/5/1951","genre":"fiction","price":345.3},
+{"title":"transition clicks-and-mortar infrastructures","author":"J. R. R. Tolkein","isbn":"254292011-7","publicationDate":"9/21/1956","genre":"technology","price":573.28},
+{"title":"repurpose strategic e-tailers","author":"George Orwell","isbn":"154045724-9","publicationDate":"11/29/1989","genre":"technology","price":323.04},
+{"title":"unleash dynamic e-tailers","author":"Jane Austen","isbn":"415717770-3","publicationDate":"10/27/2005","genre":"romance","price":354.49},
+{"title":"streamline open-source markets","author":"Stephen King","isbn":"960905848-5","publicationDate":"4/22/1942","genre":"technology","price":9.25},
+{"title":"integrate one-to-one content","author":"George Orwell","isbn":"004350160-5","publicationDate":"12/28/1988","genre":"fiction","price":744.89},
+{"title":"repurpose e-business systems","author":"Agatha Christie","isbn":"909282400-3","publicationDate":"6/22/1961","genre":"technology","price":340.61},
+{"title":"repurpose e-business web-readiness","author":"Mark Twain","isbn":"610925067-8","publicationDate":"7/5/1903","genre":"technology","price":336.81},
+{"title":"leverage cutting-edge metrics","author":"Mark Twain","isbn":"205960237-8","publicationDate":"4/29/1979","genre":"non-fiction","price":305.28},
+{"title":"benchmark customized functionalities","author":"Jane Austen","isbn":"293462829-9","publicationDate":"12/30/1902","genre":"technology","price":757.25},
+{"title":"orchestrate visionary ROI","author":"Ernest Hemingway","isbn":"601537627-9","publicationDate":"10/16/1982","genre":"mystery","price":302.72},
+{"title":"incubate visionary architectures","author":"Ernest Hemingway","isbn":"540329097-4","publicationDate":"7/11/1992","genre":"science fiction","price":134.3},
+{"title":"synergize synergistic methodologies","author":"Stephen King","isbn":"170955282-4","publicationDate":"9/6/1970","genre":"non-fiction","price":229.72},
+{"title":"reinvent B2C vortals","author":"Jane Austen","isbn":"712239992-3","publicationDate":"11/22/1982","genre":"romance","price":540.74},
+{"title":"transform extensible technologies","author":"George Orwell","isbn":"984042383-5","publicationDate":"7/19/1992","genre":"technology","price":330.74},
+{"title":"redefine plug-and-play metrics","author":"George Orwell","isbn":"360047791-9","publicationDate":"8/5/1997","genre":"technology","price":282.02},
+{"title":"strategize wireless niches","author":"Mark Twain","isbn":"013040684-8","publicationDate":"11/22/1995","genre":"romance","price":425.2},
+{"title":"mesh end-to-end synergies","author":"Jane Austen","isbn":"161417649-3","publicationDate":"3/1/2002","genre":"fiction","price":579.73},
+{"title":"harness ubiquitous mindshare","author":"Jane Austen","isbn":"305246466-3","publicationDate":"6/22/1906","genre":"mystery","price":509.84},
+{"title":"seize proactive systems","author":"Jane Austen","isbn":"017779545-X","publicationDate":"4/1/2005","genre":"romance","price":871.22},
+{"title":"repurpose visionary eyeballs","author":"George Orwell","isbn":"893618179-3","publicationDate":"5/1/1935","genre":"romance","price":627.54},
+{"title":"optimize open-source platforms","author":"J. R. R. Tolkein","isbn":"458551564-X","publicationDate":"6/7/2002","genre":"fiction","price":205.03},
+{"title":"reintermediate web-enabled initiatives","author":"J. R. R. Tolkein","isbn":"216714481-4","publicationDate":"11/9/1916","genre":"mystery","price":35.51},
+{"title":"unleash leading-edge technologies","author":"George Orwell","isbn":"168903284-7","publicationDate":"8/10/1919","genre":"romance","price":317.88},
+{"title":"synthesize best-of-breed experiences","author":"Alexander Dumas","isbn":"994637782-9","publicationDate":"3/14/1968","genre":"mystery","price":12.12},
+{"title":"syndicate plug-and-play relationships","author":"Ernest Hemingway","isbn":"492158447-8","publicationDate":"5/19/1941","genre":"romance","price":141.59},
+{"title":"syndicate wireless models","author":"George Orwell","isbn":"919112163-9","publicationDate":"6/22/2010","genre":"science fiction","price":19.22},
+{"title":"evolve robust technologies","author":"Ernest Hemingway","isbn":"676754477-9","publicationDate":"9/14/1939","genre":"non-fiction","price":922.81},
+{"title":"recontextualize value-added e-tailers","author":"Alexander Dumas","isbn":"276732740-5","publicationDate":"3/25/1932","genre":"science fiction","price":301.92},
+{"title":"implement cross-platform e-business","author":"Jane Austen","isbn":"461759830-8","publicationDate":"10/7/1913","genre":"fiction","price":93.55},
+{"title":"architect frictionless ROI","author":"Alexander Dumas","isbn":"372401398-1","publicationDate":"8/23/1932","genre":"science fiction","price":772.33},
+{"title":"embrace cross-platform deliverables","author":"Ernest Hemingway","isbn":"533463184-4","publicationDate":"1/19/2016","genre":"science fiction","price":235.12},
+{"title":"expedite plug-and-play vortals","author":"Jane Austen","isbn":"670069039-0","publicationDate":"3/22/1985","genre":"mystery","price":35.17},
+{"title":"syndicate end-to-end communities","author":"George Orwell","isbn":"463787476-9","publicationDate":"4/14/1923","genre":"technology","price":461.85},
+{"title":"exploit visionary paradigms","author":"Agatha Christie","isbn":"039413606-3","publicationDate":"1/16/1920","genre":"science fiction","price":719.54},
+{"title":"enable out-of-the-box systems","author":"Stephen King","isbn":"361158158-5","publicationDate":"6/22/2005","genre":"romance","price":623.55},
+{"title":"incentivize one-to-one mindshare","author":"Stephen King","isbn":"214274278-5","publicationDate":"10/25/1921","genre":"science fiction","price":701.28},
+{"title":"facilitate plug-and-play paradigms","author":"Stephen King","isbn":"608302219-3","publicationDate":"10/24/1973","genre":"fiction","price":852.15},
+{"title":"facilitate bleeding-edge communities","author":"Jane Austen","isbn":"002098550-9","publicationDate":"11/29/1987","genre":"romance","price":397.1},
+{"title":"synergize robust paradigms","author":"Agatha Christie","isbn":"046619274-6","publicationDate":"8/7/1908","genre":"technology","price":414.68},
+{"title":"scale front-end applications","author":"Alexander Dumas","isbn":"728453521-0","publicationDate":"3/26/1998","genre":"technology","price":716.62},
+{"title":"optimize distributed markets","author":"Agatha Christie","isbn":"926742182-4","publicationDate":"6/24/1916","genre":"fiction","price":280.71},
+{"title":"mesh scalable bandwidth","author":"Agatha Christie","isbn":"394045492-3","publicationDate":"7/2/1935","genre":"fiction","price":255.7},
+{"title":"facilitate frictionless bandwidth","author":"Ernest Hemingway","isbn":"743157613-7","publicationDate":"7/31/1943","genre":"non-fiction","price":231.85},
+{"title":"empower magnetic initiatives","author":"J. R. R. Tolkein","isbn":"637258730-0","publicationDate":"5/6/1996","genre":"romance","price":214.63},
+{"title":"optimize holistic paradigms","author":"Agatha Christie","isbn":"696148858-7","publicationDate":"10/21/1943","genre":"romance","price":7.97},
+{"title":"e-enable e-business initiatives","author":"Jane Austen","isbn":"588767920-4","publicationDate":"7/18/1931","genre":"science fiction","price":289.67},
+{"title":"unleash web-enabled web services","author":"Stephen King","isbn":"576263960-6","publicationDate":"11/9/1965","genre":"fiction","price":481.38},
+{"title":"transform global platforms","author":"Jane Austen","isbn":"806702611-4","publicationDate":"1/15/1989","genre":"mystery","price":315.6},
+{"title":"engage holistic paradigms","author":"Stephen King","isbn":"642079881-7","publicationDate":"7/18/1915","genre":"romance","price":371.8},
+{"title":"exploit dynamic channels","author":"Agatha Christie","isbn":"161267645-6","publicationDate":"7/24/2016","genre":"technology","price":37.17},
+{"title":"incentivize dynamic models","author":"Alexander Dumas","isbn":"370250070-7","publicationDate":"7/25/2019","genre":"technology","price":139.79},
+{"title":"unleash virtual e-business","author":"Ernest Hemingway","isbn":"618050947-6","publicationDate":"11/19/1905","genre":"technology","price":549.82},
+{"title":"optimize dot-com supply-chains","author":"George Orwell","isbn":"363512889-9","publicationDate":"3/8/2017","genre":"fiction","price":978.26},
+{"title":"incubate next-generation portals","author":"Mark Twain","isbn":"479672142-8","publicationDate":"7/24/1969","genre":"fiction","price":919.79},
+{"title":"iterate sexy technologies","author":"Ernest Hemingway","isbn":"578521544-6","publicationDate":"12/29/1975","genre":"fiction","price":881.2},
+{"title":"engineer cutting-edge relationships","author":"Alexander Dumas","isbn":"631398783-7","publicationDate":"11/27/1972","genre":"mystery","price":804.78},
+{"title":"target bricks-and-clicks architectures","author":"George Orwell","isbn":"181939097-7","publicationDate":"3/16/1999","genre":"technology","price":68.3},
+{"title":"orchestrate dynamic portals","author":"Ernest Hemingway","isbn":"651674312-6","publicationDate":"6/10/1967","genre":"technology","price":641.36},
+{"title":"maximize dynamic relationships","author":"Ernest Hemingway","isbn":"714431141-7","publicationDate":"11/2/1941","genre":"fiction","price":119.03},
+{"title":"matrix collaborative e-commerce","author":"Stephen King","isbn":"592766620-5","publicationDate":"4/25/1913","genre":"romance","price":946.24},
+{"title":"scale compelling initiatives","author":"J. R. R. Tolkein","isbn":"724373724-2","publicationDate":"5/20/1946","genre":"fiction","price":540.05},
+{"title":"benchmark value-added portals","author":"George Orwell","isbn":"498586521-4","publicationDate":"1/15/1981","genre":"technology","price":7.46},
+{"title":"monetize best-of-breed architectures","author":"Agatha Christie","isbn":"570792016-1","publicationDate":"3/13/1988","genre":"romance","price":371.2},
+{"title":"generate user-centric action-items","author":"Ernest Hemingway","isbn":"430530268-3","publicationDate":"12/11/1915","genre":"non-fiction","price":634.03},
+{"title":"visualize 24/7 solutions","author":"George Orwell","isbn":"979620130-5","publicationDate":"2/10/1983","genre":"romance","price":230.53},
+{"title":"envisioneer world-class channels","author":"J. R. R. Tolkein","isbn":"669099960-2","publicationDate":"12/25/1903","genre":"non-fiction","price":815.7},
+{"title":"repurpose innovative e-business","author":"George Orwell","isbn":"135092960-3","publicationDate":"1/25/1941","genre":"technology","price":786.59},
+{"title":"scale leading-edge systems","author":"Ernest Hemingway","isbn":"420127751-8","publicationDate":"11/16/1910","genre":"technology","price":67.49},
+{"title":"orchestrate transparent infomediaries","author":"Stephen King","isbn":"205439087-9","publicationDate":"3/26/1992","genre":"fiction","price":175.85},
+{"title":"facilitate sticky relationships","author":"George Orwell","isbn":"016579374-0","publicationDate":"1/10/2005","genre":"non-fiction","price":381.67},
+{"title":"mesh strategic experiences","author":"Alexander Dumas","isbn":"827348190-5","publicationDate":"3/1/1926","genre":"mystery","price":412.78},
+{"title":"scale intuitive platforms","author":"Stephen King","isbn":"422351814-3","publicationDate":"12/25/1971","genre":"non-fiction","price":826.14},
+{"title":"engineer end-to-end partnerships","author":"George Orwell","isbn":"919325300-1","publicationDate":"11/11/1902","genre":"fiction","price":179.11},
+{"title":"disintermediate efficient e-business","author":"Agatha Christie","isbn":"814386322-0","publicationDate":"3/9/1968","genre":"fiction","price":847.7},
+{"title":"revolutionize bleeding-edge communities","author":"J. R. R. Tolkein","isbn":"348835416-4","publicationDate":"9/21/2003","genre":"romance","price":350.94},
+{"title":"syndicate seamless deliverables","author":"George Orwell","isbn":"217615547-5","publicationDate":"10/31/2014","genre":"science fiction","price":476.32},
+{"title":"whiteboard world-class e-commerce","author":"Agatha Christie","isbn":"629740984-6","publicationDate":"12/8/1924","genre":"fiction","price":190.61},
+{"title":"engineer B2C functionalities","author":"Jane Austen","isbn":"052449144-5","publicationDate":"3/17/1935","genre":"non-fiction","price":239.84},
+{"title":"e-enable scalable communities","author":"Stephen King","isbn":"590679431-X","publicationDate":"5/13/1984","genre":"mystery","price":849.38},
+{"title":"morph sexy functionalities","author":"Ernest Hemingway","isbn":"606005369-6","publicationDate":"11/11/2010","genre":"romance","price":988.54},
+{"title":"matrix customized technologies","author":"Mark Twain","isbn":"392253900-9","publicationDate":"12/2/1926","genre":"mystery","price":850.24},
+{"title":"transform mission-critical systems","author":"J. R. R. Tolkein","isbn":"945611881-9","publicationDate":"5/29/1969","genre":"science fiction","price":733.22},
+{"title":"revolutionize seamless metrics","author":"Ernest Hemingway","isbn":"941184643-2","publicationDate":"6/9/2006","genre":"science fiction","price":843.28},
+{"title":"empower dynamic mindshare","author":"Jane Austen","isbn":"444537514-4","publicationDate":"5/27/1950","genre":"fiction","price":654.8},
+{"title":"orchestrate frictionless interfaces","author":"Stephen King","isbn":"286873614-9","publicationDate":"6/21/1980","genre":"fiction","price":501.38},
+{"title":"evolve extensible schemas","author":"J. R. R. Tolkein","isbn":"837820362-X","publicationDate":"1/3/1982","genre":"mystery","price":383.16},
+{"title":"implement interactive content","author":"Ernest Hemingway","isbn":"576644446-X","publicationDate":"6/21/1976","genre":"mystery","price":238.89},
+{"title":"benchmark wireless ROI","author":"Mark Twain","isbn":"901437914-5","publicationDate":"11/22/1954","genre":"fiction","price":821.11},
+{"title":"reinvent bleeding-edge infrastructures","author":"Mark Twain","isbn":"184677860-3","publicationDate":"6/1/1953","genre":"romance","price":311.69},
+{"title":"leverage scalable infomediaries","author":"George Orwell","isbn":"060984274-9","publicationDate":"5/8/1935","genre":"mystery","price":823.76},
+{"title":"revolutionize leading-edge bandwidth","author":"Stephen King","isbn":"113507639-1","publicationDate":"8/19/1927","genre":"technology","price":526.94},
+{"title":"reinvent global platforms","author":"Mark Twain","isbn":"600093955-8","publicationDate":"8/2/1946","genre":"non-fiction","price":918.36},
+{"title":"architect intuitive paradigms","author":"Agatha Christie","isbn":"995639862-4","publicationDate":"7/12/1952","genre":"romance","price":78.56},
+{"title":"visualize end-to-end systems","author":"Mark Twain","isbn":"681573905-8","publicationDate":"12/22/2005","genre":"mystery","price":610.0},
+{"title":"recontextualize clicks-and-mortar platforms","author":"Jane Austen","isbn":"939953692-0","publicationDate":"12/29/1996","genre":"romance","price":895.85},
+{"title":"embrace wireless e-services","author":"George Orwell","isbn":"465891815-3","publicationDate":"6/24/1906","genre":"technology","price":615.48},
+{"title":"drive rich action-items","author":"Stephen King","isbn":"849212764-3","publicationDate":"3/27/1958","genre":"romance","price":138.84},
+{"title":"envisioneer web-enabled experiences","author":"Ernest Hemingway","isbn":"516956803-7","publicationDate":"12/24/1919","genre":"mystery","price":130.13},
+{"title":"target granular e-markets","author":"Agatha Christie","isbn":"290212010-9","publicationDate":"12/28/1996","genre":"science fiction","price":251.23},
+{"title":"mesh bricks-and-clicks e-commerce","author":"Agatha Christie","isbn":"708239310-5","publicationDate":"8/20/1913","genre":"mystery","price":264.29},
+{"title":"iterate world-class ROI","author":"Jane Austen","isbn":"243252807-7","publicationDate":"9/20/1902","genre":"science fiction","price":327.39},
+{"title":"utilize wireless schemas","author":"Jane Austen","isbn":"268528799-X","publicationDate":"6/20/1920","genre":"non-fiction","price":239.74},
+{"title":"engage out-of-the-box e-business","author":"J. R. R. Tolkein","isbn":"132921210-X","publicationDate":"5/15/1910","genre":"fiction","price":106.07},
+{"title":"recontextualize dot-com technologies","author":"Ernest Hemingway","isbn":"156186934-1","publicationDate":"10/1/1988","genre":"mystery","price":151.46},
+{"title":"reintermediate wireless niches","author":"J. R. R. Tolkein","isbn":"021615725-0","publicationDate":"2/1/1968","genre":"science fiction","price":725.91},
+{"title":"strategize virtual e-tailers","author":"J. R. R. Tolkein","isbn":"745777427-0","publicationDate":"6/27/1967","genre":"fiction","price":741.08},
+{"title":"cultivate viral eyeballs","author":"Stephen King","isbn":"663275203-9","publicationDate":"3/30/1955","genre":"science fiction","price":890.0},
+{"title":"transition end-to-end models","author":"Stephen King","isbn":"237940678-2","publicationDate":"5/9/1984","genre":"fiction","price":527.87},
+{"title":"integrate strategic experiences","author":"George Orwell","isbn":"864358620-X","publicationDate":"10/5/2001","genre":"non-fiction","price":243.0},
+{"title":"monetize best-of-breed solutions","author":"Jane Austen","isbn":"791549864-9","publicationDate":"2/11/1935","genre":"technology","price":173.71},
+{"title":"harness intuitive platforms","author":"Ernest Hemingway","isbn":"695305049-7","publicationDate":"12/28/2012","genre":"science fiction","price":637.86},
+{"title":"grow e-business portals","author":"Mark Twain","isbn":"017538091-0","publicationDate":"6/22/2014","genre":"fiction","price":275.5},
+{"title":"integrate distributed vortals","author":"J. R. R. Tolkein","isbn":"494668263-5","publicationDate":"5/23/1979","genre":"technology","price":465.99},
+{"title":"benchmark virtual action-items","author":"Agatha Christie","isbn":"491439741-2","publicationDate":"5/9/1992","genre":"technology","price":494.54},
+{"title":"synthesize user-centric supply-chains","author":"Jane Austen","isbn":"062064376-5","publicationDate":"5/26/1957","genre":"science fiction","price":121.76},
+{"title":"seize vertical interfaces","author":"Mark Twain","isbn":"085870729-2","publicationDate":"6/13/1938","genre":"non-fiction","price":458.37},
+{"title":"expedite extensible vortals","author":"J. R. R. Tolkein","isbn":"362458319-0","publicationDate":"9/19/1964","genre":"non-fiction","price":798.48},
+{"title":"engage visionary markets","author":"Stephen King","isbn":"238662423-4","publicationDate":"1/18/2001","genre":"mystery","price":351.55},
+{"title":"recontextualize innovative technologies","author":"Jane Austen","isbn":"372139821-1","publicationDate":"3/9/1988","genre":"non-fiction","price":810.56},
+{"title":"revolutionize revolutionary eyeballs","author":"Jane Austen","isbn":"998414251-5","publicationDate":"5/19/1992","genre":"fiction","price":855.09},
+{"title":"implement granular eyeballs","author":"Alexander Dumas","isbn":"311625326-9","publicationDate":"4/11/1954","genre":"non-fiction","price":745.34},
+{"title":"grow dynamic communities","author":"Stephen King","isbn":"244059015-0","publicationDate":"11/12/1958","genre":"romance","price":340.01},
+{"title":"morph seamless communities","author":"Alexander Dumas","isbn":"384463093-7","publicationDate":"8/6/2009","genre":"science fiction","price":462.31},
+{"title":"synergize synergistic web-readiness","author":"Stephen King","isbn":"645953515-9","publicationDate":"8/19/1913","genre":"mystery","price":985.36},
+{"title":"leverage back-end convergence","author":"J. R. R. Tolkein","isbn":"888130982-3","publicationDate":"12/30/1997","genre":"non-fiction","price":664.06},
+{"title":"facilitate viral web services","author":"Agatha Christie","isbn":"471808076-2","publicationDate":"5/31/2008","genre":"non-fiction","price":667.42},
+{"title":"expedite magnetic markets","author":"Agatha Christie","isbn":"637785578-8","publicationDate":"11/3/1913","genre":"romance","price":823.33},
+{"title":"recontextualize transparent e-commerce","author":"Stephen King","isbn":"744441946-9","publicationDate":"11/8/2005","genre":"technology","price":264.69},
+{"title":"embrace B2B relationships","author":"Stephen King","isbn":"497968929-9","publicationDate":"8/16/1939","genre":"mystery","price":116.89},
+{"title":"exploit world-class e-business","author":"George Orwell","isbn":"288776882-4","publicationDate":"1/23/1989","genre":"romance","price":632.84},
+{"title":"whiteboard customized initiatives","author":"J. R. R. Tolkein","isbn":"882308667-1","publicationDate":"3/8/1935","genre":"mystery","price":552.74},
+{"title":"generate one-to-one e-commerce","author":"Mark Twain","isbn":"770205185-X","publicationDate":"10/31/1905","genre":"science fiction","price":554.33},
+{"title":"seize value-added eyeballs","author":"Alexander Dumas","isbn":"706851645-9","publicationDate":"6/25/1950","genre":"mystery","price":900.32},
+{"title":"aggregate leading-edge web services","author":"Agatha Christie","isbn":"766951050-1","publicationDate":"10/2/1979","genre":"science fiction","price":620.82},
+{"title":"harness ubiquitous e-services","author":"Mark Twain","isbn":"153343333-X","publicationDate":"12/30/1952","genre":"non-fiction","price":867.69},
+{"title":"reintermediate viral convergence","author":"J. R. R. Tolkein","isbn":"206635228-4","publicationDate":"5/4/1965","genre":"mystery","price":975.89},
+{"title":"iterate holistic convergence","author":"George Orwell","isbn":"601241058-1","publicationDate":"7/3/1903","genre":"science fiction","price":527.87},
+{"title":"maximize proactive relationships","author":"Alexander Dumas","isbn":"095432908-2","publicationDate":"6/30/1923","genre":"mystery","price":504.85},
+{"title":"unleash vertical applications","author":"Stephen King","isbn":"474859697-X","publicationDate":"7/24/2014","genre":"non-fiction","price":659.83},
+{"title":"brand sticky mindshare","author":"Jane Austen","isbn":"891314543-X","publicationDate":"10/9/2009","genre":"technology","price":425.49},
+{"title":"maximize turn-key partnerships","author":"Agatha Christie","isbn":"257681543-X","publicationDate":"1/21/1936","genre":"non-fiction","price":929.36},
+{"title":"repurpose virtual convergence","author":"Jane Austen","isbn":"687112996-0","publicationDate":"12/25/1928","genre":"romance","price":905.9},
+{"title":"reinvent killer networks","author":"Mark Twain","isbn":"011146126-X","publicationDate":"10/22/1967","genre":"fiction","price":232.8},
+{"title":"recontextualize wireless web services","author":"George Orwell","isbn":"551564699-1","publicationDate":"3/27/1936","genre":"mystery","price":453.35},
+{"title":"enhance robust convergence","author":"Agatha Christie","isbn":"107633074-6","publicationDate":"7/30/1926","genre":"technology","price":153.63},
+{"title":"deploy killer partnerships","author":"Stephen King","isbn":"415603884-X","publicationDate":"3/5/2008","genre":"mystery","price":272.54},
+{"title":"engage back-end web-readiness","author":"George Orwell","isbn":"612061714-0","publicationDate":"7/1/2015","genre":"science fiction","price":977.19},
+{"title":"transition wireless markets","author":"Stephen King","isbn":"954714190-2","publicationDate":"4/23/1961","genre":"romance","price":634.83},
+{"title":"integrate plug-and-play metrics","author":"Alexander Dumas","isbn":"033290660-4","publicationDate":"12/18/2021","genre":"science fiction","price":333.82},
+{"title":"orchestrate next-generation e-markets","author":"Mark Twain","isbn":"763204350-0","publicationDate":"8/10/1972","genre":"mystery","price":528.76},
+{"title":"architect world-class platforms","author":"Jane Austen","isbn":"094301818-8","publicationDate":"10/27/1927","genre":"science fiction","price":188.72},
+{"title":"exploit holistic interfaces","author":"J. R. R. Tolkein","isbn":"882335242-8","publicationDate":"11/15/2018","genre":"mystery","price":649.61},
+{"title":"repurpose compelling supply-chains","author":"Ernest Hemingway","isbn":"684527991-8","publicationDate":"12/5/1987","genre":"non-fiction","price":445.76},
+{"title":"orchestrate impactful platforms","author":"Agatha Christie","isbn":"641474807-2","publicationDate":"6/17/1986","genre":"romance","price":644.09},
+{"title":"seize collaborative functionalities","author":"Mark Twain","isbn":"043870736-2","publicationDate":"7/1/1979","genre":"romance","price":696.64},
+{"title":"visualize vertical systems","author":"Stephen King","isbn":"724860918-8","publicationDate":"9/14/1982","genre":"fiction","price":118.03},
+{"title":"incentivize cross-platform synergies","author":"Jane Austen","isbn":"452132211-5","publicationDate":"4/19/1972","genre":"non-fiction","price":704.04},
+{"title":"architect interactive e-business","author":"Agatha Christie","isbn":"909073395-7","publicationDate":"2/8/1951","genre":"romance","price":489.17},
+{"title":"utilize B2B platforms","author":"Mark Twain","isbn":"988382266-9","publicationDate":"7/12/1917","genre":"technology","price":522.68},
+{"title":"incubate world-class metrics","author":"Agatha Christie","isbn":"816025303-6","publicationDate":"12/16/1954","genre":"fiction","price":879.63},
+{"title":"engineer cutting-edge methodologies","author":"Mark Twain","isbn":"553679044-7","publicationDate":"6/21/1990","genre":"romance","price":283.93},
+{"title":"morph strategic mindshare","author":"Mark Twain","isbn":"231059829-1","publicationDate":"7/10/1971","genre":"non-fiction","price":204.52},
+{"title":"orchestrate cross-media vortals","author":"J. R. R. Tolkein","isbn":"571945379-2","publicationDate":"6/6/1909","genre":"technology","price":839.91},
+{"title":"utilize impactful relationships","author":"Stephen King","isbn":"642783679-X","publicationDate":"3/10/1939","genre":"mystery","price":39.55},
+{"title":"synergize cutting-edge e-tailers","author":"Jane Austen","isbn":"296175645-6","publicationDate":"4/10/1911","genre":"non-fiction","price":107.58},
+{"title":"matrix strategic paradigms","author":"J. R. R. Tolkein","isbn":"625969956-5","publicationDate":"1/6/1911","genre":"mystery","price":944.64},
+{"title":"envisioneer visionary portals","author":"Stephen King","isbn":"978023211-7","publicationDate":"3/7/1962","genre":"fiction","price":280.97},
+{"title":"whiteboard seamless markets","author":"Ernest Hemingway","isbn":"081816288-0","publicationDate":"9/18/2002","genre":"technology","price":143.35},
+{"title":"productize compelling channels","author":"Mark Twain","isbn":"532469765-6","publicationDate":"10/14/1904","genre":"technology","price":215.59},
+{"title":"productize killer e-markets","author":"J. R. R. Tolkein","isbn":"579680677-7","publicationDate":"5/7/1938","genre":"mystery","price":601.45},
+{"title":"recontextualize scalable platforms","author":"George Orwell","isbn":"833208969-7","publicationDate":"12/22/1926","genre":"non-fiction","price":273.86},
+{"title":"innovate best-of-breed web-readiness","author":"George Orwell","isbn":"464467190-8","publicationDate":"2/3/1919","genre":"non-fiction","price":121.14},
+{"title":"visualize e-business applications","author":"George Orwell","isbn":"464344178-X","publicationDate":"3/11/1988","genre":"fiction","price":919.83},
+{"title":"streamline enterprise channels","author":"Ernest Hemingway","isbn":"017404662-6","publicationDate":"6/21/1970","genre":"science fiction","price":123.83},
+{"title":"streamline B2B markets","author":"Ernest Hemingway","isbn":"839935435-X","publicationDate":"6/19/1982","genre":"romance","price":791.26},
+{"title":"enhance seamless metrics","author":"Agatha Christie","isbn":"032826167-X","publicationDate":"10/23/1921","genre":"technology","price":218.04},
+{"title":"cultivate vertical markets","author":"Alexander Dumas","isbn":"914939825-3","publicationDate":"4/26/2003","genre":"fiction","price":568.75},
+{"title":"expedite vertical solutions","author":"George Orwell","isbn":"880349092-2","publicationDate":"2/18/1957","genre":"non-fiction","price":63.85},
+{"title":"productize cross-media technologies","author":"Jane Austen","isbn":"959663100-4","publicationDate":"10/23/1949","genre":"science fiction","price":206.34},
+{"title":"seize customized infrastructures","author":"Ernest Hemingway","isbn":"223577457-1","publicationDate":"11/17/1990","genre":"technology","price":490.47},
+{"title":"repurpose revolutionary metrics","author":"Agatha Christie","isbn":"165607207-6","publicationDate":"12/24/1991","genre":"fiction","price":239.11},
+{"title":"engage end-to-end e-services","author":"J. R. R. Tolkein","isbn":"060704633-3","publicationDate":"6/1/1933","genre":"technology","price":792.08},
+{"title":"engineer world-class users","author":"Alexander Dumas","isbn":"676874335-X","publicationDate":"10/26/1977","genre":"mystery","price":926.53},
+{"title":"monetize seamless infrastructures","author":"Agatha Christie","isbn":"433238727-9","publicationDate":"9/3/1915","genre":"mystery","price":258.35},
+{"title":"strategize best-of-breed e-commerce","author":"Mark Twain","isbn":"080604773-9","publicationDate":"10/21/1972","genre":"mystery","price":482.76},
+{"title":"architect bleeding-edge bandwidth","author":"Ernest Hemingway","isbn":"371303491-5","publicationDate":"10/25/1971","genre":"technology","price":269.56},
+{"title":"engineer front-end functionalities","author":"Agatha Christie","isbn":"285555735-6","publicationDate":"9/8/1932","genre":"science fiction","price":50.64},
+{"title":"synergize 24/365 methodologies","author":"Jane Austen","isbn":"776796162-1","publicationDate":"6/7/1907","genre":"mystery","price":608.78},
+{"title":"repurpose killer bandwidth","author":"Mark Twain","isbn":"619082868-X","publicationDate":"9/8/1948","genre":"mystery","price":837.86},
+{"title":"optimize collaborative communities","author":"Stephen King","isbn":"758072375-1","publicationDate":"6/7/1931","genre":"non-fiction","price":788.28},
+{"title":"drive leading-edge web services","author":"Mark Twain","isbn":"654251846-0","publicationDate":"7/22/1903","genre":"science fiction","price":803.27},
+{"title":"strategize B2B interfaces","author":"Agatha Christie","isbn":"234213157-7","publicationDate":"1/12/1930","genre":"non-fiction","price":169.34},
+{"title":"unleash rich communities","author":"Alexander Dumas","isbn":"305944618-0","publicationDate":"9/25/2002","genre":"fiction","price":341.78},
+{"title":"recontextualize efficient action-items","author":"Agatha Christie","isbn":"749949200-1","publicationDate":"4/3/1965","genre":"mystery","price":736.47},
+{"title":"enhance dot-com e-services","author":"Jane Austen","isbn":"359369914-1","publicationDate":"5/20/2000","genre":"technology","price":773.41},
+{"title":"empower one-to-one eyeballs","author":"Alexander Dumas","isbn":"188593030-5","publicationDate":"2/18/2012","genre":"non-fiction","price":141.81},
+{"title":"reinvent impactful e-services","author":"Stephen King","isbn":"630560304-9","publicationDate":"3/2/2005","genre":"non-fiction","price":932.11},
+{"title":"envisioneer distributed bandwidth","author":"Agatha Christie","isbn":"191601811-4","publicationDate":"7/4/1911","genre":"non-fiction","price":40.28},
+{"title":"drive cross-media infomediaries","author":"Jane Austen","isbn":"637080621-8","publicationDate":"6/11/1923","genre":"fiction","price":807.18},
+{"title":"enhance scalable action-items","author":"Mark Twain","isbn":"778688771-7","publicationDate":"11/12/1959","genre":"non-fiction","price":407.82},
+{"title":"seize plug-and-play niches","author":"J. R. R. Tolkein","isbn":"832294530-2","publicationDate":"2/1/1989","genre":"technology","price":497.31},
+{"title":"exploit magnetic partnerships","author":"Mark Twain","isbn":"900218672-X","publicationDate":"7/11/1992","genre":"mystery","price":559.91},
+{"title":"innovate clicks-and-mortar technologies","author":"George Orwell","isbn":"232054348-1","publicationDate":"3/2/1952","genre":"non-fiction","price":419.18},
+{"title":"engineer intuitive networks","author":"Agatha Christie","isbn":"175081079-4","publicationDate":"12/3/2003","genre":"non-fiction","price":342.84},
+{"title":"scale visionary metrics","author":"Mark Twain","isbn":"437604261-7","publicationDate":"10/6/1940","genre":"non-fiction","price":751.41},
+{"title":"transform frictionless e-markets","author":"Stephen King","isbn":"505490079-9","publicationDate":"7/3/1923","genre":"non-fiction","price":705.1},
+{"title":"incubate dot-com supply-chains","author":"Stephen King","isbn":"659409920-5","publicationDate":"11/12/1952","genre":"science fiction","price":672.03},
+{"title":"disintermediate wireless paradigms","author":"J. R. R. Tolkein","isbn":"537309374-2","publicationDate":"12/24/1966","genre":"technology","price":871.07},
+{"title":"evolve interactive vortals","author":"Jane Austen","isbn":"332831683-3","publicationDate":"9/14/1964","genre":"mystery","price":479.4},
+{"title":"synergize open-source markets","author":"J. R. R. Tolkein","isbn":"574717402-9","publicationDate":"2/17/1998","genre":"non-fiction","price":757.85},
+{"title":"envisioneer leading-edge action-items","author":"George Orwell","isbn":"186230774-1","publicationDate":"3/2/1973","genre":"technology","price":124.15},
+{"title":"incentivize holistic portals","author":"George Orwell","isbn":"242059976-4","publicationDate":"12/10/2016","genre":"mystery","price":105.08},
+{"title":"extend cross-media synergies","author":"Agatha Christie","isbn":"837289508-2","publicationDate":"9/26/1982","genre":"technology","price":384.48},
+{"title":"extend cutting-edge applications","author":"Jane Austen","isbn":"755004778-2","publicationDate":"11/4/1968","genre":"non-fiction","price":443.68},
+{"title":"orchestrate innovative channels","author":"Ernest Hemingway","isbn":"788723681-9","publicationDate":"10/23/1929","genre":"mystery","price":84.76},
+{"title":"iterate efficient relationships","author":"Ernest Hemingway","isbn":"441511915-8","publicationDate":"3/5/1974","genre":"romance","price":799.55},
+{"title":"whiteboard real-time deliverables","author":"Jane Austen","isbn":"083812305-8","publicationDate":"7/7/2011","genre":"science fiction","price":378.54},
+{"title":"synergize back-end channels","author":"George Orwell","isbn":"043599149-3","publicationDate":"11/7/1976","genre":"technology","price":61.72},
+{"title":"deliver best-of-breed niches","author":"Stephen King","isbn":"615057831-3","publicationDate":"4/21/1943","genre":"mystery","price":64.35},
+{"title":"streamline world-class bandwidth","author":"J. R. R. Tolkein","isbn":"444174845-0","publicationDate":"12/8/1966","genre":"mystery","price":471.35},
+{"title":"unleash value-added portals","author":"Jane Austen","isbn":"837953079-9","publicationDate":"6/18/2021","genre":"technology","price":528.5},
+{"title":"reinvent open-source metrics","author":"J. R. R. Tolkein","isbn":"892544257-4","publicationDate":"11/18/2021","genre":"technology","price":758.21},
+{"title":"synergize web-enabled action-items","author":"Ernest Hemingway","isbn":"612361569-6","publicationDate":"12/9/1963","genre":"fiction","price":662.32},
+{"title":"enable customized deliverables","author":"J. R. R. Tolkein","isbn":"853320278-4","publicationDate":"4/20/1968","genre":"science fiction","price":816.69},
+{"title":"synthesize cross-media channels","author":"J. R. R. Tolkein","isbn":"824519328-3","publicationDate":"2/9/1976","genre":"fiction","price":533.15},
+{"title":"redefine innovative eyeballs","author":"Agatha Christie","isbn":"089124425-5","publicationDate":"3/8/1965","genre":"fiction","price":825.55},
+{"title":"visualize cross-media e-business","author":"Alexander Dumas","isbn":"566381852-9","publicationDate":"4/20/2006","genre":"technology","price":267.53},
+{"title":"seize extensible interfaces","author":"Alexander Dumas","isbn":"696608251-1","publicationDate":"9/2/1904","genre":"technology","price":840.32},
+{"title":"unleash bleeding-edge eyeballs","author":"Mark Twain","isbn":"254965623-7","publicationDate":"7/17/1957","genre":"mystery","price":341.1},
+{"title":"disintermediate bleeding-edge content","author":"Alexander Dumas","isbn":"602366423-7","publicationDate":"11/12/1952","genre":"technology","price":910.04},
+{"title":"enhance 24/365 schemas","author":"Mark Twain","isbn":"099870734-1","publicationDate":"5/1/2012","genre":"romance","price":152.03},
+{"title":"transition dynamic convergence","author":"Ernest Hemingway","isbn":"132903491-0","publicationDate":"3/22/2004","genre":"non-fiction","price":298.8},
+{"title":"mesh frictionless action-items","author":"Stephen King","isbn":"634016308-4","publicationDate":"12/20/2019","genre":"mystery","price":44.18},
+{"title":"scale cross-platform content","author":"George Orwell","isbn":"372776944-0","publicationDate":"7/11/1960","genre":"romance","price":163.79},
+{"title":"transition bleeding-edge e-markets","author":"J. R. R. Tolkein","isbn":"886312390-X","publicationDate":"11/8/1918","genre":"science fiction","price":675.01},
+{"title":"evolve user-centric markets","author":"Jane Austen","isbn":"208336851-7","publicationDate":"3/29/1906","genre":"science fiction","price":528.01},
+{"title":"engineer customized channels","author":"George Orwell","isbn":"367694774-6","publicationDate":"9/4/1954","genre":"romance","price":224.42},
+{"title":"morph virtual metrics","author":"Stephen King","isbn":"598898420-7","publicationDate":"7/12/1982","genre":"technology","price":833.0},
+{"title":"envisioneer frictionless portals","author":"J. R. R. Tolkein","isbn":"301152213-8","publicationDate":"3/27/1920","genre":"non-fiction","price":875.3},
+{"title":"aggregate ubiquitous technologies","author":"George Orwell","isbn":"028724327-3","publicationDate":"7/17/1908","genre":"non-fiction","price":56.24},
+{"title":"monetize best-of-breed mindshare","author":"J. R. R. Tolkein","isbn":"666588130-X","publicationDate":"10/19/1933","genre":"romance","price":508.68},
+{"title":"harness distributed portals","author":"Mark Twain","isbn":"101167183-2","publicationDate":"11/21/1910","genre":"mystery","price":805.68},
+{"title":"grow extensible web services","author":"J. R. R. Tolkein","isbn":"022703372-8","publicationDate":"10/24/1919","genre":"fiction","price":190.79},
+{"title":"disintermediate turn-key infrastructures","author":"Mark Twain","isbn":"999250632-6","publicationDate":"7/23/1949","genre":"romance","price":696.21},
+{"title":"iterate 24/7 synergies","author":"Ernest Hemingway","isbn":"377593994-6","publicationDate":"8/28/1949","genre":"romance","price":749.77},
+{"title":"synthesize compelling methodologies","author":"George Orwell","isbn":"125418824-X","publicationDate":"9/14/1958","genre":"romance","price":870.93},
+{"title":"target out-of-the-box methodologies","author":"Alexander Dumas","isbn":"223942045-6","publicationDate":"9/12/1947","genre":"non-fiction","price":948.52},
+{"title":"scale next-generation platforms","author":"Stephen King","isbn":"602886677-6","publicationDate":"3/8/1964","genre":"romance","price":110.48},
+{"title":"reintermediate B2B supply-chains","author":"Alexander Dumas","isbn":"601454310-4","publicationDate":"11/25/2018","genre":"science fiction","price":120.55},
+{"title":"benchmark granular e-commerce","author":"J. R. R. Tolkein","isbn":"342587878-6","publicationDate":"10/9/1900","genre":"romance","price":482.83},
+{"title":"embrace transparent applications","author":"Agatha Christie","isbn":"925091496-2","publicationDate":"6/30/1974","genre":"mystery","price":770.83},
+{"title":"engineer out-of-the-box infomediaries","author":"Ernest Hemingway","isbn":"487424690-7","publicationDate":"9/10/1938","genre":"technology","price":264.36},
+{"title":"enable ubiquitous initiatives","author":"Mark Twain","isbn":"634454187-3","publicationDate":"9/29/1922","genre":"fiction","price":917.01},
+{"title":"synthesize frictionless convergence","author":"Agatha Christie","isbn":"311317528-3","publicationDate":"6/28/2003","genre":"non-fiction","price":328.99},
+{"title":"transition granular paradigms","author":"J. R. R. Tolkein","isbn":"874062369-6","publicationDate":"2/19/1925","genre":"romance","price":159.89},
+{"title":"incubate open-source methodologies","author":"J. R. R. Tolkein","isbn":"200070909-5","publicationDate":"10/26/1996","genre":"fiction","price":139.62},
+{"title":"benchmark e-business eyeballs","author":"George Orwell","isbn":"404385435-8","publicationDate":"7/27/1992","genre":"technology","price":928.64},
+{"title":"cultivate integrated models","author":"Agatha Christie","isbn":"764870805-1","publicationDate":"11/28/1931","genre":"technology","price":412.37},
+{"title":"transform clicks-and-mortar content","author":"Mark Twain","isbn":"476594732-7","publicationDate":"6/12/1996","genre":"mystery","price":879.52},
+{"title":"redefine rich functionalities","author":"George Orwell","isbn":"712854770-3","publicationDate":"3/20/1980","genre":"romance","price":211.86},
+{"title":"redefine proactive systems","author":"Agatha Christie","isbn":"355550629-3","publicationDate":"8/1/1943","genre":"non-fiction","price":454.46},
+{"title":"productize intuitive models","author":"George Orwell","isbn":"428813099-9","publicationDate":"5/20/1926","genre":"science fiction","price":780.55},
+{"title":"synthesize back-end e-tailers","author":"Ernest Hemingway","isbn":"741518937-X","publicationDate":"8/21/2020","genre":"technology","price":421.83},
+{"title":"exploit world-class relationships","author":"George Orwell","isbn":"479362577-0","publicationDate":"3/23/1965","genre":"non-fiction","price":143.4},
+{"title":"revolutionize frictionless experiences","author":"Jane Austen","isbn":"185937876-5","publicationDate":"1/15/1945","genre":"technology","price":943.24},
+{"title":"visualize robust applications","author":"J. R. R. Tolkein","isbn":"325609278-0","publicationDate":"11/26/1975","genre":"romance","price":314.13},
+{"title":"leverage transparent e-markets","author":"Stephen King","isbn":"627651463-2","publicationDate":"7/16/1987","genre":"mystery","price":585.94},
+{"title":"revolutionize cross-media channels","author":"Mark Twain","isbn":"803087871-0","publicationDate":"12/15/1980","genre":"romance","price":656.66},
+{"title":"redefine world-class convergence","author":"Ernest Hemingway","isbn":"275384852-1","publicationDate":"9/23/1979","genre":"non-fiction","price":390.57},
+{"title":"evolve robust content","author":"Ernest Hemingway","isbn":"299279229-2","publicationDate":"2/25/1909","genre":"technology","price":453.98},
+{"title":"utilize ubiquitous deliverables","author":"George Orwell","isbn":"546631387-4","publicationDate":"7/28/1978","genre":"science fiction","price":684.86},
+{"title":"integrate best-of-breed portals","author":"Stephen King","isbn":"486493153-4","publicationDate":"5/3/1901","genre":"technology","price":881.13},
+{"title":"productize 24/365 infrastructures","author":"Mark Twain","isbn":"705427562-4","publicationDate":"1/14/1950","genre":"romance","price":146.03},
+{"title":"morph dynamic ROI","author":"Agatha Christie","isbn":"249558665-1","publicationDate":"11/19/1917","genre":"romance","price":45.26},
+{"title":"maximize back-end interfaces","author":"Ernest Hemingway","isbn":"576250435-2","publicationDate":"3/20/1900","genre":"science fiction","price":328.58},
+{"title":"reintermediate leading-edge schemas","author":"Alexander Dumas","isbn":"407572552-9","publicationDate":"8/12/2016","genre":"romance","price":728.37},
+{"title":"visualize transparent methodologies","author":"J. R. R. Tolkein","isbn":"266363470-0","publicationDate":"6/24/1982","genre":"mystery","price":398.16},
+{"title":"e-enable rich markets","author":"J. R. R. Tolkein","isbn":"234962806-X","publicationDate":"10/28/2014","genre":"technology","price":208.97},
+{"title":"mesh distributed paradigms","author":"Ernest Hemingway","isbn":"155838019-1","publicationDate":"8/25/1946","genre":"romance","price":922.08},
+{"title":"strategize innovative networks","author":"J. R. R. Tolkein","isbn":"660703404-7","publicationDate":"5/6/1938","genre":"romance","price":660.7},
+{"title":"aggregate strategic platforms","author":"Jane Austen","isbn":"963499899-2","publicationDate":"6/16/1976","genre":"romance","price":886.53},
+{"title":"expedite sticky models","author":"J. R. R. Tolkein","isbn":"471917691-7","publicationDate":"10/18/1908","genre":"fiction","price":874.93},
+{"title":"mesh integrated interfaces","author":"Agatha Christie","isbn":"428684039-5","publicationDate":"11/16/1959","genre":"science fiction","price":898.06},
+{"title":"brand back-end e-commerce","author":"Alexander Dumas","isbn":"831147683-7","publicationDate":"11/27/1905","genre":"fiction","price":99.67},
+{"title":"aggregate sticky e-markets","author":"J. R. R. Tolkein","isbn":"362928737-9","publicationDate":"10/29/1969","genre":"romance","price":534.26},
+{"title":"redefine leading-edge relationships","author":"George Orwell","isbn":"942494865-4","publicationDate":"4/4/1964","genre":"science fiction","price":653.75},
+{"title":"utilize magnetic networks","author":"Stephen King","isbn":"694310937-5","publicationDate":"5/3/1944","genre":"mystery","price":645.82},
+{"title":"implement impactful experiences","author":"Agatha Christie","isbn":"086028407-7","publicationDate":"4/27/1987","genre":"technology","price":741.03},
+{"title":"synthesize robust metrics","author":"Stephen King","isbn":"274278348-2","publicationDate":"12/2/1948","genre":"technology","price":176.8},
+{"title":"harness virtual e-business","author":"J. R. R. Tolkein","isbn":"807234808-6","publicationDate":"4/10/1961","genre":"romance","price":95.78},
+{"title":"reinvent bleeding-edge mindshare","author":"Mark Twain","isbn":"908364025-6","publicationDate":"9/22/1905","genre":"fiction","price":997.14},
+{"title":"redefine global synergies","author":"Ernest Hemingway","isbn":"831910852-7","publicationDate":"9/10/1933","genre":"non-fiction","price":757.36},
+{"title":"transition e-business infrastructures","author":"J. R. R. Tolkein","isbn":"768162414-7","publicationDate":"3/20/2017","genre":"non-fiction","price":126.38},
+{"title":"streamline transparent supply-chains","author":"Jane Austen","isbn":"262707285-4","publicationDate":"4/8/1950","genre":"mystery","price":368.13},
+{"title":"harness 24/7 e-commerce","author":"Alexander Dumas","isbn":"809641765-7","publicationDate":"2/23/1913","genre":"science fiction","price":378.41},
+{"title":"engineer robust channels","author":"Alexander Dumas","isbn":"246927340-4","publicationDate":"7/13/1936","genre":"mystery","price":902.32},
+{"title":"scale seamless solutions","author":"Jane Austen","isbn":"572038548-7","publicationDate":"9/5/1943","genre":"non-fiction","price":19.35},
+{"title":"recontextualize enterprise mindshare","author":"George Orwell","isbn":"218398940-8","publicationDate":"3/12/1937","genre":"fiction","price":692.2},
+{"title":"deliver distributed partnerships","author":"Agatha Christie","isbn":"576212586-6","publicationDate":"4/24/1965","genre":"mystery","price":403.04},
+{"title":"redefine B2C vortals","author":"Stephen King","isbn":"560424682-4","publicationDate":"11/14/1977","genre":"science fiction","price":712.56},
+{"title":"scale distributed action-items","author":"Ernest Hemingway","isbn":"919070231-X","publicationDate":"4/22/1919","genre":"mystery","price":828.84},
+{"title":"extend cross-media platforms","author":"Jane Austen","isbn":"352622559-1","publicationDate":"1/4/1922","genre":"science fiction","price":846.52},
+{"title":"extend wireless initiatives","author":"Stephen King","isbn":"330919882-0","publicationDate":"3/1/1993","genre":"romance","price":687.2},
+{"title":"innovate frictionless e-commerce","author":"Ernest Hemingway","isbn":"661733250-4","publicationDate":"7/11/2011","genre":"mystery","price":78.73},
+{"title":"embrace back-end infrastructures","author":"Stephen King","isbn":"411208277-0","publicationDate":"12/4/1986","genre":"romance","price":814.04},
+{"title":"implement web-enabled deliverables","author":"Jane Austen","isbn":"690498347-7","publicationDate":"10/26/1908","genre":"technology","price":592.16},
+{"title":"synergize scalable e-tailers","author":"Ernest Hemingway","isbn":"439264956-3","publicationDate":"5/17/1998","genre":"science fiction","price":53.44},
+{"title":"unleash world-class e-services","author":"Alexander Dumas","isbn":"161594250-5","publicationDate":"7/31/1975","genre":"technology","price":469.03},
+{"title":"integrate B2C experiences","author":"Jane Austen","isbn":"810278947-6","publicationDate":"4/14/1956","genre":"fiction","price":834.13},
+{"title":"streamline clicks-and-mortar models","author":"Jane Austen","isbn":"867718429-5","publicationDate":"10/22/1919","genre":"non-fiction","price":198.47},
+{"title":"brand wireless networks","author":"George Orwell","isbn":"958256629-9","publicationDate":"4/23/1974","genre":"fiction","price":278.15},
+{"title":"transition distributed interfaces","author":"George Orwell","isbn":"163933588-9","publicationDate":"1/14/1962","genre":"technology","price":169.36},
+{"title":"maximize global convergence","author":"Ernest Hemingway","isbn":"856097970-0","publicationDate":"12/14/1906","genre":"mystery","price":26.32},
+{"title":"envisioneer B2B paradigms","author":"George Orwell","isbn":"898060521-8","publicationDate":"4/6/2003","genre":"mystery","price":185.37},
+{"title":"matrix robust metrics","author":"J. R. R. Tolkein","isbn":"729058155-5","publicationDate":"3/3/1972","genre":"fiction","price":259.64},
+{"title":"synthesize interactive infrastructures","author":"Stephen King","isbn":"573764224-0","publicationDate":"2/25/2016","genre":"technology","price":719.16},
+{"title":"expedite best-of-breed technologies","author":"George Orwell","isbn":"595679512-3","publicationDate":"3/28/1920","genre":"science fiction","price":396.05},
+{"title":"harness vertical models","author":"Jane Austen","isbn":"599721634-9","publicationDate":"12/8/1937","genre":"romance","price":529.73},
+{"title":"synthesize efficient convergence","author":"Ernest Hemingway","isbn":"705553938-2","publicationDate":"5/18/1983","genre":"science fiction","price":864.01},
+{"title":"brand end-to-end solutions","author":"Agatha Christie","isbn":"892649103-X","publicationDate":"2/10/1919","genre":"romance","price":979.29},
+{"title":"streamline efficient infomediaries","author":"J. R. R. Tolkein","isbn":"843806806-5","publicationDate":"1/2/2006","genre":"technology","price":168.72},
+{"title":"innovate sticky communities","author":"Stephen King","isbn":"028452304-6","publicationDate":"6/17/2004","genre":"non-fiction","price":287.26},
+{"title":"incentivize interactive convergence","author":"J. R. R. Tolkein","isbn":"016710111-0","publicationDate":"10/23/1923","genre":"technology","price":968.53},
+{"title":"implement rich e-commerce","author":"Mark Twain","isbn":"442972426-1","publicationDate":"10/17/1988","genre":"fiction","price":652.16},
+{"title":"enable intuitive initiatives","author":"Jane Austen","isbn":"302322461-7","publicationDate":"11/5/1903","genre":"science fiction","price":58.68},
+{"title":"transform 24/365 methodologies","author":"Mark Twain","isbn":"878505706-1","publicationDate":"10/17/2012","genre":"science fiction","price":148.42},
+{"title":"synthesize web-enabled communities","author":"Agatha Christie","isbn":"205388366-9","publicationDate":"10/14/1903","genre":"non-fiction","price":602.75},
+{"title":"deploy integrated ROI","author":"Alexander Dumas","isbn":"131514117-5","publicationDate":"10/5/1910","genre":"romance","price":130.89},
+{"title":"strategize 24/365 experiences","author":"Agatha Christie","isbn":"390643822-8","publicationDate":"11/17/2017","genre":"romance","price":190.21},
+{"title":"transition turn-key e-markets","author":"George Orwell","isbn":"220974888-7","publicationDate":"12/28/1930","genre":"mystery","price":237.81},
+{"title":"extend interactive initiatives","author":"Stephen King","isbn":"282518573-6","publicationDate":"1/29/1920","genre":"mystery","price":355.72},
+{"title":"expedite ubiquitous web-readiness","author":"Ernest Hemingway","isbn":"781930180-5","publicationDate":"12/31/1976","genre":"science fiction","price":287.14},
+{"title":"seize strategic methodologies","author":"George Orwell","isbn":"250157917-8","publicationDate":"1/12/1935","genre":"non-fiction","price":475.57},
+{"title":"extend best-of-breed deliverables","author":"Ernest Hemingway","isbn":"409585936-9","publicationDate":"4/26/2006","genre":"fiction","price":704.13},
+{"title":"matrix efficient e-services","author":"J. R. R. Tolkein","isbn":"610354414-9","publicationDate":"10/11/2000","genre":"science fiction","price":458.6},
+{"title":"strategize real-time users","author":"J. R. R. Tolkein","isbn":"436564932-9","publicationDate":"11/26/1999","genre":"mystery","price":150.98},
+{"title":"leverage holistic action-items","author":"J. R. R. Tolkein","isbn":"905553747-0","publicationDate":"10/29/1995","genre":"non-fiction","price":827.86},
+{"title":"target end-to-end action-items","author":"J. R. R. Tolkein","isbn":"542582492-0","publicationDate":"10/29/1919","genre":"non-fiction","price":981.81},
+{"title":"extend enterprise niches","author":"Alexander Dumas","isbn":"701894348-5","publicationDate":"7/22/1957","genre":"romance","price":302.33},
+{"title":"architect best-of-breed models","author":"Stephen King","isbn":"087825046-8","publicationDate":"6/21/1908","genre":"fiction","price":180.08},
+{"title":"facilitate world-class architectures","author":"Stephen King","isbn":"473417414-8","publicationDate":"9/17/1964","genre":"non-fiction","price":210.21},
+{"title":"streamline virtual methodologies","author":"Alexander Dumas","isbn":"086084570-2","publicationDate":"8/23/2020","genre":"non-fiction","price":61.41},
+{"title":"disintermediate dynamic technologies","author":"Alexander Dumas","isbn":"251672935-9","publicationDate":"6/24/1925","genre":"science fiction","price":443.56},
+{"title":"repurpose e-business e-tailers","author":"Ernest Hemingway","isbn":"148703931-X","publicationDate":"7/15/1965","genre":"romance","price":677.37},
+{"title":"reinvent value-added convergence","author":"Stephen King","isbn":"251151269-6","publicationDate":"1/9/2004","genre":"romance","price":730.85},
+{"title":"exploit scalable architectures","author":"Jane Austen","isbn":"061760896-2","publicationDate":"10/8/1954","genre":"technology","price":372.03},
+{"title":"engage global channels","author":"Mark Twain","isbn":"599100649-0","publicationDate":"7/3/1924","genre":"technology","price":776.09},
+{"title":"integrate cross-platform platforms","author":"Ernest Hemingway","isbn":"782495218-5","publicationDate":"2/2/1948","genre":"technology","price":71.82},
+{"title":"synthesize 24/365 e-services","author":"Mark Twain","isbn":"132363352-9","publicationDate":"12/2/1955","genre":"technology","price":539.32},
+{"title":"recontextualize innovative functionalities","author":"Mark Twain","isbn":"020914939-6","publicationDate":"11/12/1930","genre":"mystery","price":149.48},
+{"title":"empower revolutionary channels","author":"Mark Twain","isbn":"174248588-X","publicationDate":"10/6/1989","genre":"technology","price":401.13},
+{"title":"cultivate e-business deliverables","author":"George Orwell","isbn":"568583808-5","publicationDate":"9/16/1964","genre":"romance","price":644.51},
+{"title":"enable user-centric e-tailers","author":"Alexander Dumas","isbn":"883463047-5","publicationDate":"2/9/2003","genre":"fiction","price":479.3},
+{"title":"aggregate open-source infrastructures","author":"Agatha Christie","isbn":"842652065-0","publicationDate":"7/3/1916","genre":"romance","price":767.47},
+{"title":"streamline B2B mindshare","author":"George Orwell","isbn":"542432539-4","publicationDate":"12/14/1987","genre":"mystery","price":800.84},
+{"title":"transition out-of-the-box channels","author":"Agatha Christie","isbn":"442254835-2","publicationDate":"11/25/1970","genre":"fiction","price":529.94},
+{"title":"visualize one-to-one portals","author":"Alexander Dumas","isbn":"821239324-0","publicationDate":"9/24/1987","genre":"non-fiction","price":980.99},
+{"title":"target collaborative niches","author":"J. R. R. Tolkein","isbn":"806514565-5","publicationDate":"10/4/2009","genre":"science fiction","price":135.27},
+{"title":"productize intuitive functionalities","author":"George Orwell","isbn":"221240130-2","publicationDate":"1/31/1961","genre":"romance","price":41.15},
+{"title":"integrate B2C e-tailers","author":"Mark Twain","isbn":"757424050-7","publicationDate":"8/15/2013","genre":"non-fiction","price":134.38},
+{"title":"integrate value-added supply-chains","author":"Ernest Hemingway","isbn":"552124540-5","publicationDate":"11/29/1924","genre":"fiction","price":398.56},
+{"title":"generate holistic deliverables","author":"Alexander Dumas","isbn":"093815742-6","publicationDate":"12/3/1986","genre":"science fiction","price":75.64},
+{"title":"aggregate magnetic relationships","author":"George Orwell","isbn":"196193066-8","publicationDate":"3/6/2021","genre":"fiction","price":764.73},
+{"title":"orchestrate best-of-breed markets","author":"Alexander Dumas","isbn":"047633846-8","publicationDate":"10/15/1979","genre":"technology","price":771.36},
+{"title":"repurpose transparent relationships","author":"Jane Austen","isbn":"660111088-4","publicationDate":"12/3/1929","genre":"romance","price":708.85},
+{"title":"whiteboard magnetic deliverables","author":"Agatha Christie","isbn":"475926936-3","publicationDate":"11/4/1986","genre":"non-fiction","price":316.53},
+{"title":"whiteboard user-centric bandwidth","author":"Jane Austen","isbn":"857682878-2","publicationDate":"11/11/1996","genre":"science fiction","price":36.67},
+{"title":"empower one-to-one platforms","author":"George Orwell","isbn":"568414817-4","publicationDate":"3/29/1974","genre":"technology","price":115.19},
+{"title":"grow bleeding-edge ROI","author":"Ernest Hemingway","isbn":"537637152-2","publicationDate":"4/30/2003","genre":"mystery","price":316.04},
+{"title":"recontextualize integrated vortals","author":"Stephen King","isbn":"978987968-7","publicationDate":"5/10/1955","genre":"mystery","price":981.21},
+{"title":"engineer robust markets","author":"Alexander Dumas","isbn":"245987498-7","publicationDate":"10/16/1954","genre":"mystery","price":603.16},
+{"title":"engage seamless supply-chains","author":"Jane Austen","isbn":"700939303-6","publicationDate":"8/18/1942","genre":"non-fiction","price":815.29},
+{"title":"matrix customized synergies","author":"Jane Austen","isbn":"253692504-8","publicationDate":"9/30/1920","genre":"romance","price":160.95},
+{"title":"transform cross-media initiatives","author":"J. R. R. Tolkein","isbn":"027943500-2","publicationDate":"6/21/1970","genre":"mystery","price":756.64},
+{"title":"streamline cutting-edge eyeballs","author":"J. R. R. Tolkein","isbn":"656491204-8","publicationDate":"5/23/1932","genre":"non-fiction","price":164.79},
+{"title":"enable holistic convergence","author":"Stephen King","isbn":"234362956-0","publicationDate":"4/29/2000","genre":"non-fiction","price":545.39},
+{"title":"disintermediate extensible infrastructures","author":"George Orwell","isbn":"780253954-4","publicationDate":"6/1/2022","genre":"science fiction","price":899.21},
+{"title":"redefine plug-and-play initiatives","author":"Alexander Dumas","isbn":"622449637-4","publicationDate":"11/28/1999","genre":"fiction","price":246.53},
+{"title":"benchmark collaborative solutions","author":"J. R. R. Tolkein","isbn":"545525127-9","publicationDate":"3/1/1943","genre":"fiction","price":429.93},
+{"title":"implement B2C mindshare","author":"George Orwell","isbn":"380535994-2","publicationDate":"6/11/1950","genre":"romance","price":228.31},
+{"title":"revolutionize synergistic methodologies","author":"Agatha Christie","isbn":"132068737-7","publicationDate":"11/8/2021","genre":"fiction","price":85.97},
+{"title":"redefine web-enabled e-tailers","author":"Stephen King","isbn":"372600618-4","publicationDate":"11/12/1937","genre":"technology","price":382.76},
+{"title":"architect leading-edge initiatives","author":"Stephen King","isbn":"932682994-4","publicationDate":"8/27/1973","genre":"fiction","price":429.06},
+{"title":"generate best-of-breed relationships","author":"Stephen King","isbn":"339919791-8","publicationDate":"12/11/1974","genre":"fiction","price":42.08},
+{"title":"brand bleeding-edge markets","author":"Mark Twain","isbn":"738086485-8","publicationDate":"12/22/1986","genre":"technology","price":162.67},
+{"title":"extend transparent relationships","author":"Alexander Dumas","isbn":"836163789-3","publicationDate":"10/7/1940","genre":"non-fiction","price":70.42},
+{"title":"unleash transparent infrastructures","author":"J. R. R. Tolkein","isbn":"683858792-0","publicationDate":"4/3/1952","genre":"mystery","price":603.72},
+{"title":"orchestrate front-end e-tailers","author":"Stephen King","isbn":"456503138-8","publicationDate":"8/3/1994","genre":"technology","price":139.84},
+{"title":"facilitate customized applications","author":"J. R. R. Tolkein","isbn":"258425296-1","publicationDate":"11/27/1985","genre":"non-fiction","price":720.94},
+{"title":"facilitate viral deliverables","author":"Jane Austen","isbn":"693852954-X","publicationDate":"1/23/1993","genre":"science fiction","price":155.1},
+{"title":"reinvent 24/365 networks","author":"Alexander Dumas","isbn":"433391224-5","publicationDate":"3/18/1910","genre":"mystery","price":463.73},
+{"title":"synthesize cutting-edge initiatives","author":"Stephen King","isbn":"845123569-7","publicationDate":"11/22/1917","genre":"science fiction","price":36.32},
+{"title":"seize holistic technologies","author":"Agatha Christie","isbn":"323317934-0","publicationDate":"4/6/1906","genre":"science fiction","price":17.2},
+{"title":"disintermediate end-to-end mindshare","author":"Alexander Dumas","isbn":"519384701-3","publicationDate":"7/21/1900","genre":"science fiction","price":868.44},
+{"title":"brand visionary initiatives","author":"Alexander Dumas","isbn":"233938198-3","publicationDate":"1/9/1915","genre":"fiction","price":95.95},
+{"title":"envisioneer open-source content","author":"Alexander Dumas","isbn":"161693234-1","publicationDate":"1/16/1949","genre":"non-fiction","price":357.57},
+{"title":"grow frictionless vortals","author":"J. R. R. Tolkein","isbn":"235631658-2","publicationDate":"8/14/1942","genre":"technology","price":462.45},
+{"title":"enhance value-added methodologies","author":"Jane Austen","isbn":"343137237-6","publicationDate":"5/8/2020","genre":"fiction","price":785.09},
+{"title":"envisioneer global content","author":"George Orwell","isbn":"993659294-8","publicationDate":"3/8/1986","genre":"technology","price":197.65},
+{"title":"transition bleeding-edge applications","author":"Mark Twain","isbn":"734048815-4","publicationDate":"10/31/1950","genre":"mystery","price":797.29},
+{"title":"evolve revolutionary infrastructures","author":"George Orwell","isbn":"486804381-1","publicationDate":"9/14/2001","genre":"fiction","price":360.78},
+{"title":"seize visionary solutions","author":"J. R. R. Tolkein","isbn":"156912499-X","publicationDate":"7/25/1987","genre":"mystery","price":257.9},
+{"title":"monetize cross-platform eyeballs","author":"Stephen King","isbn":"715423486-5","publicationDate":"6/1/1909","genre":"romance","price":526.61},
+{"title":"exploit proactive eyeballs","author":"Alexander Dumas","isbn":"899101900-5","publicationDate":"11/3/1904","genre":"technology","price":362.4},
+{"title":"exploit web-enabled action-items","author":"Mark Twain","isbn":"794213265-X","publicationDate":"1/20/1959","genre":"science fiction","price":53.05},
+{"title":"syndicate global portals","author":"Mark Twain","isbn":"442954754-8","publicationDate":"1/1/2015","genre":"fiction","price":459.56},
+{"title":"grow viral markets","author":"Stephen King","isbn":"774877145-6","publicationDate":"1/1/1905","genre":"science fiction","price":841.02},
+{"title":"cultivate killer functionalities","author":"J. R. R. Tolkein","isbn":"343432478-X","publicationDate":"12/2/1930","genre":"fiction","price":612.64},
+{"title":"implement best-of-breed solutions","author":"J. R. R. Tolkein","isbn":"657115669-5","publicationDate":"1/3/1903","genre":"science fiction","price":517.36},
+{"title":"extend mission-critical technologies","author":"Ernest Hemingway","isbn":"679287332-2","publicationDate":"10/24/1982","genre":"mystery","price":582.43},
+{"title":"reinvent collaborative web-readiness","author":"Mark Twain","isbn":"516334060-3","publicationDate":"3/24/2015","genre":"science fiction","price":518.77},
+{"title":"utilize collaborative action-items","author":"Alexander Dumas","isbn":"390201638-8","publicationDate":"10/8/1987","genre":"technology","price":212.54},
+{"title":"exploit wireless communities","author":"Ernest Hemingway","isbn":"015976044-5","publicationDate":"8/14/1941","genre":"science fiction","price":477.95},
+{"title":"cultivate seamless paradigms","author":"Mark Twain","isbn":"543655613-2","publicationDate":"12/3/1943","genre":"fiction","price":710.91},
+{"title":"repurpose compelling solutions","author":"Mark Twain","isbn":"811235745-5","publicationDate":"7/28/1976","genre":"technology","price":126.43},
+{"title":"deploy sexy channels","author":"Alexander Dumas","isbn":"775548036-4","publicationDate":"11/30/1966","genre":"non-fiction","price":958.81},
+{"title":"visualize frictionless communities","author":"George Orwell","isbn":"415555822-X","publicationDate":"8/14/1981","genre":"mystery","price":884.89},
+{"title":"repurpose magnetic markets","author":"Jane Austen","isbn":"726243800-X","publicationDate":"8/21/2017","genre":"mystery","price":408.42},
+{"title":"architect impactful solutions","author":"Stephen King","isbn":"994649023-4","publicationDate":"6/24/2014","genre":"romance","price":921.96},
+{"title":"harness virtual infrastructures","author":"J. R. R. Tolkein","isbn":"274498740-9","publicationDate":"5/13/1986","genre":"science fiction","price":45.28},
+{"title":"recontextualize compelling bandwidth","author":"Jane Austen","isbn":"266452698-7","publicationDate":"6/18/1952","genre":"technology","price":837.07},
+{"title":"drive clicks-and-mortar e-tailers","author":"Alexander Dumas","isbn":"948918794-1","publicationDate":"8/22/1916","genre":"romance","price":635.02},
+{"title":"disintermediate one-to-one networks","author":"George Orwell","isbn":"535595146-5","publicationDate":"5/3/1957","genre":"mystery","price":238.62},
+{"title":"innovate plug-and-play synergies","author":"Jane Austen","isbn":"761608378-1","publicationDate":"12/19/1961","genre":"fiction","price":973.77},
+{"title":"brand sticky content","author":"Ernest Hemingway","isbn":"472232669-X","publicationDate":"4/28/1920","genre":"fiction","price":296.28},
+{"title":"repurpose rich e-business","author":"J. R. R. Tolkein","isbn":"433793901-6","publicationDate":"1/10/1903","genre":"mystery","price":141.13},
+{"title":"optimize killer methodologies","author":"Agatha Christie","isbn":"070464570-X","publicationDate":"12/2/1956","genre":"romance","price":467.99},
+{"title":"embrace granular functionalities","author":"George Orwell","isbn":"124959314-X","publicationDate":"12/8/1948","genre":"romance","price":229.02},
+{"title":"unleash back-end users","author":"George Orwell","isbn":"592376840-2","publicationDate":"10/7/1936","genre":"fiction","price":345.38},
+{"title":"evolve seamless technologies","author":"Jane Austen","isbn":"918548898-4","publicationDate":"3/14/1980","genre":"fiction","price":730.75},
+{"title":"streamline turn-key e-tailers","author":"George Orwell","isbn":"696904855-1","publicationDate":"9/13/1951","genre":"technology","price":471.86},
+{"title":"transform wireless methodologies","author":"J. R. R. Tolkein","isbn":"598169783-0","publicationDate":"1/21/1978","genre":"romance","price":656.23},
+{"title":"deploy enterprise bandwidth","author":"Alexander Dumas","isbn":"315763424-0","publicationDate":"12/7/2009","genre":"fiction","price":949.33},
+{"title":"integrate extensible convergence","author":"Alexander Dumas","isbn":"370798605-5","publicationDate":"7/5/1954","genre":"science fiction","price":599.63},
+{"title":"visualize rich web-readiness","author":"Alexander Dumas","isbn":"927444291-2","publicationDate":"8/12/1982","genre":"romance","price":19.39},
+{"title":"integrate front-end ROI","author":"Jane Austen","isbn":"283818735-X","publicationDate":"6/7/1964","genre":"science fiction","price":522.73},
+{"title":"syndicate interactive networks","author":"Stephen King","isbn":"456711855-3","publicationDate":"4/7/2006","genre":"science fiction","price":523.93},
+{"title":"brand enterprise vortals","author":"George Orwell","isbn":"499423673-9","publicationDate":"12/2/1904","genre":"non-fiction","price":777.17},
+{"title":"drive value-added partnerships","author":"George Orwell","isbn":"268788415-4","publicationDate":"12/7/1964","genre":"science fiction","price":302.04},
+{"title":"syndicate interactive content","author":"Stephen King","isbn":"121452441-9","publicationDate":"2/23/1991","genre":"science fiction","price":806.34},
+{"title":"scale back-end functionalities","author":"J. R. R. Tolkein","isbn":"900291714-7","publicationDate":"12/28/1984","genre":"fiction","price":398.47},
+{"title":"recontextualize value-added content","author":"Stephen King","isbn":"732726140-0","publicationDate":"12/16/2003","genre":"technology","price":654.39},
+{"title":"productize integrated e-commerce","author":"Alexander Dumas","isbn":"739337688-1","publicationDate":"1/7/1969","genre":"mystery","price":925.02},
+{"title":"optimize next-generation systems","author":"Agatha Christie","isbn":"843794553-4","publicationDate":"3/28/1996","genre":"science fiction","price":305.89},
+{"title":"reintermediate open-source interfaces","author":"George Orwell","isbn":"505256466-X","publicationDate":"12/25/2021","genre":"science fiction","price":637.12},
+{"title":"streamline 24/7 applications","author":"Jane Austen","isbn":"360813597-9","publicationDate":"4/2/1935","genre":"non-fiction","price":522.03},
+{"title":"exploit collaborative metrics","author":"Stephen King","isbn":"507064096-8","publicationDate":"8/19/2022","genre":"science fiction","price":934.66},
+{"title":"engage virtual ROI","author":"Agatha Christie","isbn":"016947424-0","publicationDate":"10/9/1919","genre":"romance","price":690.13},
+{"title":"strategize plug-and-play methodologies","author":"Mark Twain","isbn":"628026398-3","publicationDate":"5/16/1919","genre":"mystery","price":940.27},
+{"title":"streamline user-centric partnerships","author":"Alexander Dumas","isbn":"940838644-2","publicationDate":"12/10/1920","genre":"fiction","price":639.17},
+{"title":"disintermediate magnetic vortals","author":"George Orwell","isbn":"292959354-7","publicationDate":"4/2/1907","genre":"technology","price":778.23},
+{"title":"orchestrate compelling solutions","author":"Stephen King","isbn":"572703045-5","publicationDate":"4/7/1953","genre":"romance","price":186.26},
+{"title":"drive holistic bandwidth","author":"Stephen King","isbn":"036221416-6","publicationDate":"8/14/1903","genre":"fiction","price":182.71},
+{"title":"iterate bleeding-edge channels","author":"Stephen King","isbn":"270715945-X","publicationDate":"3/13/2021","genre":"technology","price":517.72},
+{"title":"target vertical infomediaries","author":"Ernest Hemingway","isbn":"031881541-9","publicationDate":"10/31/1994","genre":"science fiction","price":408.66},
+{"title":"facilitate best-of-breed e-services","author":"J. R. R. Tolkein","isbn":"226776893-3","publicationDate":"10/27/1905","genre":"romance","price":113.28},
+{"title":"monetize dot-com niches","author":"Ernest Hemingway","isbn":"058964208-1","publicationDate":"2/10/2003","genre":"mystery","price":357.24},
+{"title":"harness intuitive solutions","author":"Stephen King","isbn":"664914096-1","publicationDate":"4/5/1928","genre":"science fiction","price":359.69},
+{"title":"synthesize e-business web-readiness","author":"Ernest Hemingway","isbn":"935137523-4","publicationDate":"12/13/1979","genre":"romance","price":292.83},
+{"title":"recontextualize cross-platform e-business","author":"Mark Twain","isbn":"877505144-3","publicationDate":"5/21/1964","genre":"science fiction","price":496.53},
+{"title":"grow rich experiences","author":"J. R. R. Tolkein","isbn":"626879520-2","publicationDate":"4/27/1933","genre":"non-fiction","price":196.3},
+{"title":"evolve viral networks","author":"George Orwell","isbn":"424901927-6","publicationDate":"10/11/1967","genre":"non-fiction","price":108.68},
+{"title":"evolve killer niches","author":"Agatha Christie","isbn":"892162638-7","publicationDate":"12/8/1970","genre":"romance","price":48.99},
+{"title":"matrix back-end functionalities","author":"Jane Austen","isbn":"290601825-2","publicationDate":"11/17/1994","genre":"mystery","price":753.76},
+{"title":"evolve efficient content","author":"Mark Twain","isbn":"681027874-5","publicationDate":"5/16/1983","genre":"science fiction","price":47.97},
+{"title":"synergize cutting-edge communities","author":"J. R. R. Tolkein","isbn":"079581994-3","publicationDate":"2/15/2020","genre":"science fiction","price":309.24},
+{"title":"enhance e-business models","author":"Ernest Hemingway","isbn":"574556427-X","publicationDate":"4/30/1927","genre":"romance","price":401.04},
+{"title":"aggregate 24/365 e-commerce","author":"Agatha Christie","isbn":"884271063-6","publicationDate":"3/30/1943","genre":"fiction","price":46.15},
+{"title":"transition best-of-breed markets","author":"Mark Twain","isbn":"278797942-4","publicationDate":"10/3/1900","genre":"mystery","price":638.28},
+{"title":"embrace global mindshare","author":"J. R. R. Tolkein","isbn":"579248568-2","publicationDate":"7/20/2012","genre":"romance","price":721.19},
+{"title":"drive value-added markets","author":"George Orwell","isbn":"877225915-9","publicationDate":"10/25/1977","genre":"science fiction","price":593.24},
+{"title":"revolutionize intuitive schemas","author":"Alexander Dumas","isbn":"080834656-3","publicationDate":"7/11/1962","genre":"science fiction","price":19.07},
+{"title":"empower real-time mindshare","author":"Stephen King","isbn":"142119392-2","publicationDate":"3/28/1924","genre":"mystery","price":341.51},
+{"title":"enhance turn-key metrics","author":"Stephen King","isbn":"713451903-1","publicationDate":"8/13/2001","genre":"science fiction","price":579.0},
+{"title":"repurpose rich eyeballs","author":"Agatha Christie","isbn":"557234837-6","publicationDate":"2/7/1976","genre":"mystery","price":26.35},
+{"title":"grow magnetic markets","author":"J. R. R. Tolkein","isbn":"104033365-6","publicationDate":"2/4/1990","genre":"non-fiction","price":312.4},
+{"title":"matrix virtual bandwidth","author":"Alexander Dumas","isbn":"159850085-6","publicationDate":"7/22/1969","genre":"science fiction","price":504.57},
+{"title":"embrace value-added markets","author":"George Orwell","isbn":"836613319-2","publicationDate":"12/20/1974","genre":"science fiction","price":123.12},
+{"title":"exploit robust models","author":"Mark Twain","isbn":"868933410-6","publicationDate":"7/9/1977","genre":"mystery","price":191.7},
+{"title":"redefine cross-media communities","author":"Mark Twain","isbn":"687442146-8","publicationDate":"7/27/2010","genre":"mystery","price":190.32},
+{"title":"incentivize virtual deliverables","author":"Stephen King","isbn":"156340065-0","publicationDate":"4/28/1995","genre":"fiction","price":474.78},
+{"title":"visualize world-class e-commerce","author":"Jane Austen","isbn":"685268287-0","publicationDate":"3/3/1990","genre":"romance","price":31.78},
+{"title":"brand 24/365 applications","author":"Alexander Dumas","isbn":"142027416-3","publicationDate":"5/22/2006","genre":"fiction","price":725.21},
+{"title":"expedite holistic infrastructures","author":"Jane Austen","isbn":"207864094-8","publicationDate":"9/20/1983","genre":"fiction","price":869.55},
+{"title":"optimize real-time partnerships","author":"Ernest Hemingway","isbn":"976394700-6","publicationDate":"11/20/1911","genre":"romance","price":89.19},
+{"title":"benchmark back-end vortals","author":"Ernest Hemingway","isbn":"227713772-3","publicationDate":"7/18/1920","genre":"romance","price":180.12},
+{"title":"target holistic technologies","author":"George Orwell","isbn":"899391890-2","publicationDate":"11/15/1961","genre":"science fiction","price":612.01},
+{"title":"facilitate vertical schemas","author":"J. R. R. Tolkein","isbn":"632108837-4","publicationDate":"11/23/1900","genre":"science fiction","price":835.94},
+{"title":"aggregate efficient interfaces","author":"Alexander Dumas","isbn":"791486165-0","publicationDate":"8/1/1922","genre":"technology","price":488.04},
+{"title":"benchmark e-business metrics","author":"Stephen King","isbn":"170228817-X","publicationDate":"8/22/1933","genre":"romance","price":662.7},
+{"title":"productize enterprise action-items","author":"Ernest Hemingway","isbn":"135170150-9","publicationDate":"6/14/1981","genre":"non-fiction","price":343.51},
+{"title":"streamline seamless synergies","author":"J. R. R. Tolkein","isbn":"677772537-7","publicationDate":"6/7/2002","genre":"mystery","price":622.51},
+{"title":"matrix dynamic markets","author":"Ernest Hemingway","isbn":"805786460-5","publicationDate":"2/3/2017","genre":"mystery","price":66.22},
+{"title":"integrate cross-platform methodologies","author":"J. R. R. Tolkein","isbn":"148375805-2","publicationDate":"10/18/1920","genre":"fiction","price":357.53},
+{"title":"recontextualize efficient niches","author":"Mark Twain","isbn":"778503772-8","publicationDate":"8/31/1934","genre":"non-fiction","price":798.33},
+{"title":"envisioneer strategic convergence","author":"J. R. R. Tolkein","isbn":"783088096-4","publicationDate":"4/18/1995","genre":"science fiction","price":301.26},
+{"title":"grow customized portals","author":"Agatha Christie","isbn":"037857774-3","publicationDate":"3/25/2020","genre":"science fiction","price":299.84},
+{"title":"transform sexy relationships","author":"Stephen King","isbn":"029937876-4","publicationDate":"12/24/1910","genre":"science fiction","price":653.18},
+{"title":"expedite e-business platforms","author":"Jane Austen","isbn":"004521238-4","publicationDate":"5/25/1957","genre":"technology","price":826.83},
+{"title":"syndicate bricks-and-clicks technologies","author":"Stephen King","isbn":"343514187-5","publicationDate":"10/14/1949","genre":"fiction","price":222.72},
+{"title":"transform cutting-edge models","author":"Stephen King","isbn":"906606506-0","publicationDate":"2/10/1947","genre":"science fiction","price":818.24},
+{"title":"aggregate virtual infrastructures","author":"Alexander Dumas","isbn":"087494260-8","publicationDate":"2/10/1925","genre":"mystery","price":57.71},
+{"title":"envisioneer compelling e-commerce","author":"J. R. R. Tolkein","isbn":"272628813-8","publicationDate":"1/1/1980","genre":"non-fiction","price":676.75},
+{"title":"reintermediate cutting-edge paradigms","author":"Agatha Christie","isbn":"483406242-2","publicationDate":"4/28/2016","genre":"fiction","price":173.22},
+{"title":"synthesize dynamic functionalities","author":"Ernest Hemingway","isbn":"933740719-1","publicationDate":"10/17/1994","genre":"technology","price":747.27},
+{"title":"incentivize impactful eyeballs","author":"Mark Twain","isbn":"723655814-1","publicationDate":"8/24/1977","genre":"science fiction","price":959.37},
+{"title":"deploy revolutionary e-services","author":"George Orwell","isbn":"530565699-0","publicationDate":"11/16/1910","genre":"technology","price":28.49},
+{"title":"harness magnetic e-services","author":"Ernest Hemingway","isbn":"884874494-X","publicationDate":"8/16/1944","genre":"technology","price":570.34},
+{"title":"reinvent open-source schemas","author":"Stephen King","isbn":"894383900-6","publicationDate":"3/25/1936","genre":"romance","price":683.12},
+{"title":"reinvent wireless content","author":"Agatha Christie","isbn":"008314294-0","publicationDate":"10/14/1990","genre":"technology","price":159.88},
+{"title":"incentivize customized e-tailers","author":"J. R. R. Tolkein","isbn":"105398819-2","publicationDate":"8/26/1906","genre":"mystery","price":53.55},
+{"title":"mesh e-business eyeballs","author":"Stephen King","isbn":"142841574-2","publicationDate":"11/23/2000","genre":"mystery","price":6.53},
+{"title":"redefine strategic architectures","author":"George Orwell","isbn":"237809987-8","publicationDate":"1/5/2013","genre":"technology","price":18.92},
+{"title":"deploy visionary paradigms","author":"Agatha Christie","isbn":"763889096-5","publicationDate":"11/29/1931","genre":"science fiction","price":671.94},
+{"title":"morph integrated e-business","author":"Alexander Dumas","isbn":"183961824-8","publicationDate":"4/11/1914","genre":"technology","price":949.49},
+{"title":"e-enable global channels","author":"J. R. R. Tolkein","isbn":"028903688-7","publicationDate":"7/14/2006","genre":"mystery","price":428.67},
+{"title":"evolve cross-platform e-business","author":"Agatha Christie","isbn":"480580578-1","publicationDate":"11/2/2002","genre":"mystery","price":858.07},
+{"title":"deliver collaborative ROI","author":"George Orwell","isbn":"294046679-3","publicationDate":"10/4/2013","genre":"technology","price":342.84},
+{"title":"maximize real-time web services","author":"Agatha Christie","isbn":"605102525-1","publicationDate":"6/8/1944","genre":"mystery","price":794.93},
+{"title":"engineer distributed models","author":"Mark Twain","isbn":"491052399-5","publicationDate":"3/4/2019","genre":"mystery","price":215.67},
+{"title":"optimize out-of-the-box web services","author":"J. R. R. Tolkein","isbn":"091611222-5","publicationDate":"4/18/1971","genre":"technology","price":289.49},
+{"title":"envisioneer seamless e-commerce","author":"George Orwell","isbn":"833293052-9","publicationDate":"7/10/2011","genre":"technology","price":93.06},
+{"title":"transition cross-media users","author":"Mark Twain","isbn":"864659627-3","publicationDate":"10/14/1944","genre":"fiction","price":20.14},
+{"title":"disintermediate extensible eyeballs","author":"Mark Twain","isbn":"457358152-9","publicationDate":"4/18/1956","genre":"technology","price":959.8},
+{"title":"integrate distributed synergies","author":"Stephen King","isbn":"707623833-0","publicationDate":"8/15/1908","genre":"romance","price":766.86},
+{"title":"aggregate global methodologies","author":"Stephen King","isbn":"990355680-2","publicationDate":"4/30/1914","genre":"technology","price":843.89},
+{"title":"redefine transparent functionalities","author":"Alexander Dumas","isbn":"511389597-0","publicationDate":"6/20/1980","genre":"romance","price":544.78},
+{"title":"visualize next-generation communities","author":"Mark Twain","isbn":"255358184-X","publicationDate":"6/13/1976","genre":"romance","price":894.19},
+{"title":"evolve sexy relationships","author":"Stephen King","isbn":"229593279-3","publicationDate":"5/18/1902","genre":"non-fiction","price":677.02},
+{"title":"matrix front-end e-markets","author":"Jane Austen","isbn":"395568654-X","publicationDate":"11/29/1975","genre":"science fiction","price":591.94},
+{"title":"transform holistic infomediaries","author":"J. R. R. Tolkein","isbn":"075628000-1","publicationDate":"8/15/1969","genre":"science fiction","price":578.39},
+{"title":"implement end-to-end functionalities","author":"J. R. R. Tolkein","isbn":"681007609-3","publicationDate":"5/2/2005","genre":"mystery","price":786.0},
+{"title":"synthesize value-added solutions","author":"Alexander Dumas","isbn":"184647889-8","publicationDate":"2/17/1975","genre":"technology","price":405.69},
+{"title":"architect scalable partnerships","author":"Mark Twain","isbn":"123180684-2","publicationDate":"6/5/1930","genre":"technology","price":481.54},
+{"title":"utilize rich bandwidth","author":"Mark Twain","isbn":"961945038-8","publicationDate":"12/24/1984","genre":"mystery","price":636.89},
+{"title":"evolve sexy metrics","author":"J. R. R. Tolkein","isbn":"313505721-6","publicationDate":"2/15/1940","genre":"non-fiction","price":141.48},
+{"title":"productize enterprise ROI","author":"Ernest Hemingway","isbn":"309075534-3","publicationDate":"7/22/1963","genre":"non-fiction","price":284.34},
+{"title":"target proactive content","author":"Alexander Dumas","isbn":"515379041-X","publicationDate":"10/5/1981","genre":"mystery","price":138.46},
+{"title":"integrate user-centric interfaces","author":"Mark Twain","isbn":"708042426-7","publicationDate":"9/12/2004","genre":"technology","price":311.97},
+{"title":"reinvent cross-media deliverables","author":"Alexander Dumas","isbn":"189089490-7","publicationDate":"12/28/1948","genre":"non-fiction","price":116.06},
+{"title":"mesh dynamic channels","author":"J. R. R. Tolkein","isbn":"658906232-3","publicationDate":"6/9/2015","genre":"fiction","price":861.43},
+{"title":"optimize turn-key architectures","author":"Agatha Christie","isbn":"491784247-6","publicationDate":"8/3/1970","genre":"technology","price":581.89},
+{"title":"transform interactive networks","author":"Ernest Hemingway","isbn":"492295585-2","publicationDate":"8/12/1914","genre":"non-fiction","price":708.19},
+{"title":"recontextualize B2B networks","author":"J. R. R. Tolkein","isbn":"400310044-1","publicationDate":"7/9/1908","genre":"technology","price":168.44},
+{"title":"incubate out-of-the-box communities","author":"Alexander Dumas","isbn":"396904504-5","publicationDate":"12/25/1994","genre":"fiction","price":903.44},
+{"title":"leverage visionary e-commerce","author":"Ernest Hemingway","isbn":"978623703-X","publicationDate":"11/19/1972","genre":"technology","price":169.94},
+{"title":"whiteboard scalable mindshare","author":"Jane Austen","isbn":"178229656-5","publicationDate":"1/15/1904","genre":"mystery","price":86.51},
+{"title":"brand web-enabled technologies","author":"Stephen King","isbn":"474594029-7","publicationDate":"5/29/1912","genre":"mystery","price":509.95},
+{"title":"implement plug-and-play relationships","author":"George Orwell","isbn":"186610407-1","publicationDate":"3/4/1960","genre":"romance","price":593.45},
+{"title":"empower seamless infomediaries","author":"Mark Twain","isbn":"053005418-3","publicationDate":"11/30/1963","genre":"non-fiction","price":552.22},
+{"title":"enhance next-generation infomediaries","author":"Jane Austen","isbn":"111593087-7","publicationDate":"7/27/1976","genre":"romance","price":534.17},
+{"title":"transform frictionless e-tailers","author":"Agatha Christie","isbn":"710989989-6","publicationDate":"1/7/2004","genre":"mystery","price":616.66},
+{"title":"scale impactful content","author":"Jane Austen","isbn":"053187170-3","publicationDate":"9/4/2021","genre":"romance","price":716.75},
+{"title":"incentivize bleeding-edge mindshare","author":"Ernest Hemingway","isbn":"351205565-6","publicationDate":"12/28/1957","genre":"mystery","price":132.4},
+{"title":"cultivate end-to-end relationships","author":"Ernest Hemingway","isbn":"815941976-7","publicationDate":"1/28/1976","genre":"fiction","price":238.7},
+{"title":"streamline frictionless convergence","author":"J. R. R. Tolkein","isbn":"897176791-X","publicationDate":"8/7/1977","genre":"technology","price":300.81},
+{"title":"facilitate innovative e-business","author":"Mark Twain","isbn":"891681502-9","publicationDate":"10/31/1981","genre":"science fiction","price":506.06},
+{"title":"optimize integrated platforms","author":"Mark Twain","isbn":"272094888-8","publicationDate":"3/28/1900","genre":"romance","price":550.47},
+{"title":"brand bricks-and-clicks channels","author":"Alexander Dumas","isbn":"771467410-5","publicationDate":"10/18/1994","genre":"romance","price":986.47},
+{"title":"mesh efficient channels","author":"Mark Twain","isbn":"102152366-6","publicationDate":"6/21/1998","genre":"technology","price":907.32},
+{"title":"productize frictionless e-tailers","author":"Agatha Christie","isbn":"729822202-3","publicationDate":"11/6/1983","genre":"science fiction","price":739.82},
+{"title":"benchmark wireless e-commerce","author":"Mark Twain","isbn":"949133475-1","publicationDate":"1/19/1943","genre":"non-fiction","price":941.1},
+{"title":"seize visionary content","author":"J. R. R. Tolkein","isbn":"919182847-3","publicationDate":"4/9/1923","genre":"romance","price":751.71},
+{"title":"generate leading-edge methodologies","author":"George Orwell","isbn":"194353991-X","publicationDate":"12/30/1995","genre":"mystery","price":780.31},
+{"title":"enhance 24/7 web-readiness","author":"Ernest Hemingway","isbn":"292286914-8","publicationDate":"2/11/1997","genre":"non-fiction","price":149.56},
+{"title":"morph viral mindshare","author":"J. R. R. Tolkein","isbn":"060157295-5","publicationDate":"10/31/1931","genre":"non-fiction","price":454.34},
+{"title":"revolutionize visionary e-markets","author":"Stephen King","isbn":"599192520-8","publicationDate":"3/30/1953","genre":"romance","price":374.65},
+{"title":"implement bricks-and-clicks networks","author":"J. R. R. Tolkein","isbn":"242245703-7","publicationDate":"10/16/1905","genre":"technology","price":81.83},
+{"title":"synthesize intuitive technologies","author":"Ernest Hemingway","isbn":"425228408-2","publicationDate":"5/23/1928","genre":"fiction","price":620.44},
+{"title":"transition mission-critical platforms","author":"Ernest Hemingway","isbn":"529434064-X","publicationDate":"8/27/1957","genre":"fiction","price":287.49},
+{"title":"utilize cross-platform relationships","author":"Jane Austen","isbn":"003778547-8","publicationDate":"4/17/2016","genre":"technology","price":793.28},
+{"title":"disintermediate intuitive web-readiness","author":"J. R. R. Tolkein","isbn":"056693495-7","publicationDate":"1/23/1911","genre":"non-fiction","price":161.66},
+{"title":"engage innovative bandwidth","author":"Ernest Hemingway","isbn":"186169995-6","publicationDate":"3/14/1994","genre":"non-fiction","price":436.53},
+{"title":"deploy extensible initiatives","author":"Mark Twain","isbn":"999054539-1","publicationDate":"9/3/1968","genre":"science fiction","price":895.42},
+{"title":"utilize end-to-end markets","author":"George Orwell","isbn":"263126606-4","publicationDate":"4/16/1985","genre":"science fiction","price":29.59},
+{"title":"evolve bricks-and-clicks experiences","author":"J. R. R. Tolkein","isbn":"325788856-2","publicationDate":"2/27/2014","genre":"fiction","price":58.38},
+{"title":"matrix cross-media schemas","author":"Ernest Hemingway","isbn":"025779973-7","publicationDate":"12/21/2016","genre":"romance","price":503.53},
+{"title":"revolutionize end-to-end vortals","author":"George Orwell","isbn":"477854949-X","publicationDate":"6/29/1978","genre":"science fiction","price":510.07},
+{"title":"deploy impactful partnerships","author":"Stephen King","isbn":"688386933-6","publicationDate":"5/11/1992","genre":"romance","price":272.33},
+{"title":"productize web-enabled metrics","author":"J. R. R. Tolkein","isbn":"280918530-1","publicationDate":"12/12/1977","genre":"fiction","price":901.98},
+{"title":"seize bleeding-edge functionalities","author":"Mark Twain","isbn":"112159295-3","publicationDate":"12/26/1964","genre":"technology","price":936.94},
+{"title":"innovate scalable infomediaries","author":"Agatha Christie","isbn":"192490639-2","publicationDate":"2/6/1955","genre":"romance","price":15.42},
+{"title":"deploy distributed initiatives","author":"George Orwell","isbn":"441914700-8","publicationDate":"4/9/1971","genre":"non-fiction","price":983.15},
+{"title":"deploy bricks-and-clicks networks","author":"J. R. R. Tolkein","isbn":"739303900-1","publicationDate":"7/2/1993","genre":"romance","price":16.36},
+{"title":"generate e-business experiences","author":"J. R. R. Tolkein","isbn":"139485090-5","publicationDate":"12/23/2004","genre":"technology","price":860.86},
+{"title":"disintermediate cross-media interfaces","author":"Stephen King","isbn":"853914054-3","publicationDate":"8/23/2020","genre":"mystery","price":302.74},
+{"title":"iterate e-business infomediaries","author":"Jane Austen","isbn":"104547341-3","publicationDate":"6/8/1936","genre":"technology","price":406.66},
+{"title":"facilitate ubiquitous e-markets","author":"Alexander Dumas","isbn":"179151622-X","publicationDate":"11/18/1957","genre":"science fiction","price":29.22},
+{"title":"synthesize ubiquitous platforms","author":"Ernest Hemingway","isbn":"453542854-9","publicationDate":"11/28/1941","genre":"science fiction","price":718.27},
+{"title":"syndicate synergistic markets","author":"Stephen King","isbn":"569070153-X","publicationDate":"12/27/1924","genre":"romance","price":531.47},
+{"title":"strategize viral eyeballs","author":"Stephen King","isbn":"518764523-4","publicationDate":"11/26/1973","genre":"mystery","price":159.15},
+{"title":"synergize best-of-breed channels","author":"Mark Twain","isbn":"615137724-9","publicationDate":"2/20/1953","genre":"technology","price":166.7},
+{"title":"mesh innovative metrics","author":"Stephen King","isbn":"526337095-4","publicationDate":"10/17/1909","genre":"non-fiction","price":637.52},
+{"title":"innovate interactive web-readiness","author":"George Orwell","isbn":"259318014-5","publicationDate":"1/30/1958","genre":"science fiction","price":952.7},
+{"title":"enable revolutionary e-business","author":"J. R. R. Tolkein","isbn":"490891473-7","publicationDate":"12/31/1950","genre":"mystery","price":513.39},
+{"title":"whiteboard bleeding-edge networks","author":"Agatha Christie","isbn":"496001223-4","publicationDate":"12/6/2017","genre":"romance","price":394.77},
+{"title":"enable holistic interfaces","author":"Jane Austen","isbn":"519103752-9","publicationDate":"9/7/1973","genre":"technology","price":701.2},
+{"title":"mesh extensible web-readiness","author":"George Orwell","isbn":"691468530-4","publicationDate":"1/31/1934","genre":"romance","price":782.37},
+{"title":"drive magnetic e-services","author":"Stephen King","isbn":"966277514-5","publicationDate":"5/7/1969","genre":"non-fiction","price":800.46},
+{"title":"architect out-of-the-box niches","author":"Mark Twain","isbn":"068694393-7","publicationDate":"6/10/2002","genre":"non-fiction","price":23.05},
+{"title":"integrate sticky systems","author":"Stephen King","isbn":"217600739-5","publicationDate":"7/24/1998","genre":"fiction","price":704.09},
+{"title":"iterate proactive metrics","author":"Agatha Christie","isbn":"982100411-3","publicationDate":"10/25/1965","genre":"romance","price":730.63},
+{"title":"strategize one-to-one users","author":"Jane Austen","isbn":"217718605-6","publicationDate":"6/25/1921","genre":"science fiction","price":739.48},
+{"title":"leverage interactive interfaces","author":"Alexander Dumas","isbn":"062491115-2","publicationDate":"11/7/2006","genre":"non-fiction","price":568.41},
+{"title":"enhance strategic e-commerce","author":"J. R. R. Tolkein","isbn":"256979268-3","publicationDate":"9/13/1964","genre":"non-fiction","price":754.37},
+{"title":"scale integrated portals","author":"Stephen King","isbn":"711794525-7","publicationDate":"11/9/1910","genre":"science fiction","price":760.22},
+{"title":"incentivize real-time e-services","author":"George Orwell","isbn":"304915118-8","publicationDate":"3/23/1930","genre":"science fiction","price":76.06},
+{"title":"incubate proactive experiences","author":"Agatha Christie","isbn":"443466575-8","publicationDate":"7/15/2012","genre":"fiction","price":491.95},
+{"title":"reinvent wireless e-services","author":"Mark Twain","isbn":"075163754-8","publicationDate":"3/19/1926","genre":"fiction","price":653.76},
+{"title":"iterate efficient content","author":"Mark Twain","isbn":"474626922-X","publicationDate":"10/1/1927","genre":"science fiction","price":875.71},
+{"title":"cultivate scalable supply-chains","author":"Stephen King","isbn":"913570641-4","publicationDate":"12/16/1987","genre":"technology","price":272.7},
+{"title":"repurpose transparent e-business","author":"Ernest Hemingway","isbn":"182960872-X","publicationDate":"9/8/1984","genre":"non-fiction","price":23.65},
+{"title":"streamline plug-and-play mindshare","author":"Jane Austen","isbn":"350935329-3","publicationDate":"3/21/1946","genre":"non-fiction","price":843.86},
+{"title":"mesh e-business mindshare","author":"Jane Austen","isbn":"437068954-6","publicationDate":"1/24/1933","genre":"technology","price":410.4},
+{"title":"recontextualize best-of-breed communities","author":"Agatha Christie","isbn":"027008477-0","publicationDate":"6/30/1901","genre":"romance","price":52.1},
+{"title":"reinvent ubiquitous paradigms","author":"Mark Twain","isbn":"805287974-4","publicationDate":"4/2/1936","genre":"non-fiction","price":483.87},
+{"title":"enhance wireless action-items","author":"Stephen King","isbn":"382864450-3","publicationDate":"5/22/1903","genre":"technology","price":4.12},
+{"title":"visualize efficient functionalities","author":"Mark Twain","isbn":"326990237-9","publicationDate":"10/25/2020","genre":"fiction","price":458.45},
+{"title":"incentivize synergistic relationships","author":"J. R. R. Tolkein","isbn":"098689893-7","publicationDate":"1/19/2022","genre":"science fiction","price":171.1},
+{"title":"optimize vertical platforms","author":"Mark Twain","isbn":"109855718-2","publicationDate":"9/17/1915","genre":"science fiction","price":411.78},
+{"title":"drive out-of-the-box schemas","author":"Jane Austen","isbn":"819072350-2","publicationDate":"5/22/1983","genre":"science fiction","price":536.22},
+{"title":"grow extensible e-services","author":"Mark Twain","isbn":"145756006-2","publicationDate":"5/8/2003","genre":"science fiction","price":62.61},
+{"title":"synthesize cutting-edge mindshare","author":"Ernest Hemingway","isbn":"027986033-1","publicationDate":"6/15/2016","genre":"mystery","price":231.85},
+{"title":"drive intuitive infrastructures","author":"J. R. R. Tolkein","isbn":"806180396-8","publicationDate":"2/1/2006","genre":"technology","price":309.9},
+{"title":"productize viral e-business","author":"Agatha Christie","isbn":"417405406-1","publicationDate":"4/27/2013","genre":"mystery","price":265.02},
+{"title":"syndicate real-time mindshare","author":"Stephen King","isbn":"220711779-0","publicationDate":"4/14/1976","genre":"romance","price":65.35},
+{"title":"benchmark back-end synergies","author":"Alexander Dumas","isbn":"825416909-8","publicationDate":"2/5/2009","genre":"mystery","price":852.9},
+{"title":"optimize efficient partnerships","author":"Alexander Dumas","isbn":"036948162-3","publicationDate":"5/3/1941","genre":"non-fiction","price":553.06},
+{"title":"leverage dynamic e-tailers","author":"Agatha Christie","isbn":"378735342-9","publicationDate":"11/8/1950","genre":"romance","price":95.88},
+{"title":"harness clicks-and-mortar ROI","author":"Agatha Christie","isbn":"788485216-0","publicationDate":"5/2/1954","genre":"technology","price":939.62},
+{"title":"transition cross-media functionalities","author":"J. R. R. Tolkein","isbn":"634590473-2","publicationDate":"4/14/1900","genre":"romance","price":348.41},
+{"title":"seize real-time convergence","author":"Alexander Dumas","isbn":"504691215-5","publicationDate":"11/25/1942","genre":"technology","price":565.81},
+{"title":"deploy B2B supply-chains","author":"Jane Austen","isbn":"127173880-5","publicationDate":"4/14/1931","genre":"mystery","price":736.56},
+{"title":"e-enable bleeding-edge applications","author":"Jane Austen","isbn":"674791531-3","publicationDate":"9/11/1900","genre":"mystery","price":203.36},
+{"title":"synthesize leading-edge architectures","author":"J. R. R. Tolkein","isbn":"609432934-1","publicationDate":"11/5/1981","genre":"mystery","price":413.92},
+{"title":"target ubiquitous relationships","author":"Mark Twain","isbn":"377536644-X","publicationDate":"6/7/1970","genre":"fiction","price":739.59},
+{"title":"exploit sticky communities","author":"Jane Austen","isbn":"022603908-0","publicationDate":"1/1/1982","genre":"romance","price":349.64},
+{"title":"productize extensible channels","author":"Ernest Hemingway","isbn":"177101807-0","publicationDate":"8/17/2016","genre":"science fiction","price":727.42},
+{"title":"transform compelling e-markets","author":"Alexander Dumas","isbn":"096760882-1","publicationDate":"9/8/1930","genre":"technology","price":48.5},
+{"title":"iterate extensible vortals","author":"George Orwell","isbn":"920154857-5","publicationDate":"2/26/1911","genre":"romance","price":160.86},
+{"title":"expedite back-end supply-chains","author":"Agatha Christie","isbn":"143946851-6","publicationDate":"1/30/1967","genre":"technology","price":721.6},
+{"title":"morph wireless schemas","author":"Agatha Christie","isbn":"179856925-6","publicationDate":"10/28/1966","genre":"mystery","price":686.59},
+{"title":"mesh turn-key infomediaries","author":"Ernest Hemingway","isbn":"952968212-3","publicationDate":"9/3/1964","genre":"non-fiction","price":270.07},
+{"title":"engage sticky deliverables","author":"Ernest Hemingway","isbn":"654458809-1","publicationDate":"5/25/1900","genre":"non-fiction","price":176.13},
+{"title":"aggregate sexy e-services","author":"Mark Twain","isbn":"331348867-6","publicationDate":"9/18/1969","genre":"science fiction","price":784.04},
+{"title":"drive distributed e-markets","author":"Agatha Christie","isbn":"879254727-3","publicationDate":"10/2/1933","genre":"romance","price":835.08},
+{"title":"revolutionize open-source eyeballs","author":"Jane Austen","isbn":"481724606-5","publicationDate":"4/28/1909","genre":"science fiction","price":855.56},
+{"title":"disintermediate web-enabled technologies","author":"Agatha Christie","isbn":"863331523-8","publicationDate":"8/14/1901","genre":"romance","price":239.01},
+{"title":"repurpose integrated interfaces","author":"Mark Twain","isbn":"804703566-5","publicationDate":"7/30/1904","genre":"science fiction","price":545.71},
+{"title":"integrate customized networks","author":"Alexander Dumas","isbn":"608487549-1","publicationDate":"8/7/1942","genre":"romance","price":712.34},
+{"title":"target magnetic communities","author":"Mark Twain","isbn":"669872540-4","publicationDate":"1/5/1922","genre":"science fiction","price":143.14},
+{"title":"deliver wireless architectures","author":"Agatha Christie","isbn":"674200629-3","publicationDate":"2/27/1947","genre":"non-fiction","price":532.14},
+{"title":"extend web-enabled interfaces","author":"J. R. R. Tolkein","isbn":"062449277-X","publicationDate":"2/13/1981","genre":"science fiction","price":467.98},
+{"title":"orchestrate sticky e-tailers","author":"Stephen King","isbn":"274791742-8","publicationDate":"10/3/2007","genre":"non-fiction","price":348.29},
+{"title":"benchmark seamless experiences","author":"Jane Austen","isbn":"637263133-4","publicationDate":"9/2/1970","genre":"non-fiction","price":4.06},
+{"title":"extend proactive methodologies","author":"Stephen King","isbn":"228606898-4","publicationDate":"9/1/1997","genre":"non-fiction","price":883.09},
+{"title":"incubate global initiatives","author":"Agatha Christie","isbn":"096502295-1","publicationDate":"2/1/1980","genre":"fiction","price":156.39},
+{"title":"evolve magnetic ROI","author":"Stephen King","isbn":"819766186-3","publicationDate":"4/9/1926","genre":"mystery","price":965.22},
+{"title":"seize rich e-commerce","author":"Stephen King","isbn":"822473237-1","publicationDate":"7/27/2005","genre":"mystery","price":843.89},
+{"title":"brand synergistic ROI","author":"Mark Twain","isbn":"856555938-6","publicationDate":"6/15/1962","genre":"fiction","price":680.94},
+{"title":"productize distributed markets","author":"Alexander Dumas","isbn":"096753165-9","publicationDate":"6/25/2006","genre":"non-fiction","price":946.69},
+{"title":"drive bleeding-edge technologies","author":"Agatha Christie","isbn":"925720898-2","publicationDate":"10/20/2006","genre":"fiction","price":889.65},
+{"title":"enable scalable experiences","author":"Agatha Christie","isbn":"829027638-9","publicationDate":"9/27/1926","genre":"romance","price":858.16},
+{"title":"grow turn-key initiatives","author":"Agatha Christie","isbn":"482644572-5","publicationDate":"4/15/1924","genre":"technology","price":119.66},
+{"title":"empower synergistic e-services","author":"Ernest Hemingway","isbn":"599541028-8","publicationDate":"10/3/1958","genre":"technology","price":802.0},
+{"title":"revolutionize clicks-and-mortar convergence","author":"George Orwell","isbn":"461938295-7","publicationDate":"8/27/1932","genre":"romance","price":730.96},
+{"title":"implement compelling portals","author":"Jane Austen","isbn":"841061192-9","publicationDate":"5/21/2014","genre":"mystery","price":429.11},
+{"title":"target dynamic web-readiness","author":"George Orwell","isbn":"661197164-5","publicationDate":"12/13/1939","genre":"mystery","price":327.03},
+{"title":"whiteboard leading-edge architectures","author":"Ernest Hemingway","isbn":"391796311-6","publicationDate":"3/3/1968","genre":"technology","price":971.73},
+{"title":"matrix rich e-business","author":"Ernest Hemingway","isbn":"079872439-0","publicationDate":"7/1/1999","genre":"mystery","price":525.77},
+{"title":"engage best-of-breed communities","author":"Mark Twain","isbn":"007528884-2","publicationDate":"2/21/1910","genre":"technology","price":57.61},
+{"title":"syndicate magnetic interfaces","author":"Agatha Christie","isbn":"684572710-4","publicationDate":"5/18/1954","genre":"non-fiction","price":563.59},
+{"title":"architect web-enabled e-tailers","author":"George Orwell","isbn":"527184029-8","publicationDate":"3/10/1909","genre":"mystery","price":321.71},
+{"title":"engage B2C niches","author":"Stephen King","isbn":"954620316-5","publicationDate":"8/19/1971","genre":"mystery","price":20.13},
+{"title":"whiteboard killer e-business","author":"Alexander Dumas","isbn":"899709538-2","publicationDate":"6/4/1986","genre":"romance","price":626.09},
+{"title":"reintermediate mission-critical synergies","author":"Alexander Dumas","isbn":"869865841-5","publicationDate":"10/27/1973","genre":"romance","price":992.78},
+{"title":"facilitate sexy e-services","author":"Alexander Dumas","isbn":"111787482-6","publicationDate":"3/12/1975","genre":"science fiction","price":209.28},
+{"title":"expedite back-end solutions","author":"Ernest Hemingway","isbn":"368397182-7","publicationDate":"11/2/1983","genre":"mystery","price":181.86},
+{"title":"architect clicks-and-mortar communities","author":"Alexander Dumas","isbn":"836724363-3","publicationDate":"8/24/1915","genre":"science fiction","price":150.78},
+{"title":"monetize frictionless technologies","author":"J. R. R. Tolkein","isbn":"900347802-3","publicationDate":"12/31/1915","genre":"fiction","price":957.6},
+{"title":"leverage enterprise e-tailers","author":"Ernest Hemingway","isbn":"722844221-0","publicationDate":"2/14/1993","genre":"technology","price":879.63},
+{"title":"seize cross-media niches","author":"Mark Twain","isbn":"734569347-3","publicationDate":"11/26/1961","genre":"mystery","price":85.38},
+{"title":"optimize open-source infomediaries","author":"Mark Twain","isbn":"649151127-8","publicationDate":"11/18/2019","genre":"romance","price":943.96},
+{"title":"expedite ubiquitous models","author":"Ernest Hemingway","isbn":"604533757-3","publicationDate":"11/29/1914","genre":"non-fiction","price":705.45},
+{"title":"enable dot-com web-readiness","author":"Ernest Hemingway","isbn":"628093344-X","publicationDate":"11/2/2005","genre":"romance","price":628.25},
+{"title":"seize back-end markets","author":"Alexander Dumas","isbn":"634684023-1","publicationDate":"8/3/2009","genre":"science fiction","price":253.58},
+{"title":"innovate compelling vortals","author":"Agatha Christie","isbn":"583171895-6","publicationDate":"7/1/1944","genre":"mystery","price":131.35},
+{"title":"matrix synergistic experiences","author":"Alexander Dumas","isbn":"612933989-5","publicationDate":"3/14/2009","genre":"technology","price":284.15},
+{"title":"envisioneer viral networks","author":"Agatha Christie","isbn":"055068581-2","publicationDate":"10/31/2003","genre":"technology","price":654.84},
+{"title":"grow mission-critical solutions","author":"J. R. R. Tolkein","isbn":"165267258-3","publicationDate":"12/23/1965","genre":"fiction","price":923.98},
+{"title":"redefine sticky channels","author":"Jane Austen","isbn":"186034744-4","publicationDate":"8/26/2013","genre":"science fiction","price":64.93},
+{"title":"whiteboard out-of-the-box infrastructures","author":"Mark Twain","isbn":"551485290-3","publicationDate":"8/16/1962","genre":"mystery","price":506.15},
+{"title":"integrate visionary synergies","author":"Mark Twain","isbn":"710571089-6","publicationDate":"9/19/1958","genre":"science fiction","price":467.05},
+{"title":"deliver next-generation e-services","author":"Jane Austen","isbn":"125021845-4","publicationDate":"10/30/1963","genre":"romance","price":704.53},
+{"title":"deploy extensible methodologies","author":"Agatha Christie","isbn":"308099180-X","publicationDate":"10/20/1923","genre":"technology","price":340.64},
+{"title":"transition e-business e-markets","author":"Agatha Christie","isbn":"613890136-3","publicationDate":"2/28/1917","genre":"mystery","price":481.46},
+{"title":"productize dynamic schemas","author":"J. R. R. Tolkein","isbn":"299278682-9","publicationDate":"5/15/1902","genre":"technology","price":354.34},
+{"title":"enhance granular mindshare","author":"J. R. R. Tolkein","isbn":"681743336-3","publicationDate":"3/4/2002","genre":"technology","price":423.49},
+{"title":"reinvent integrated solutions","author":"Mark Twain","isbn":"214358843-7","publicationDate":"4/2/1944","genre":"romance","price":348.94},
+{"title":"exploit cross-platform mindshare","author":"Alexander Dumas","isbn":"636487553-X","publicationDate":"8/20/1939","genre":"science fiction","price":389.8},
+{"title":"streamline web-enabled action-items","author":"Ernest Hemingway","isbn":"169887651-3","publicationDate":"4/10/1975","genre":"science fiction","price":124.46},
+{"title":"integrate scalable supply-chains","author":"Mark Twain","isbn":"579718116-9","publicationDate":"10/14/1928","genre":"technology","price":900.12},
+{"title":"enable dot-com models","author":"J. R. R. Tolkein","isbn":"546554102-4","publicationDate":"7/5/1976","genre":"mystery","price":326.43},
+{"title":"enhance efficient technologies","author":"Stephen King","isbn":"687636816-5","publicationDate":"9/23/1999","genre":"non-fiction","price":286.85},
+{"title":"brand 24/365 e-business","author":"Alexander Dumas","isbn":"601250827-1","publicationDate":"10/1/1950","genre":"science fiction","price":82.07},
+{"title":"architect web-enabled users","author":"Alexander Dumas","isbn":"000342888-5","publicationDate":"4/24/1954","genre":"non-fiction","price":72.06},
+{"title":"utilize world-class web-readiness","author":"Stephen King","isbn":"344238110-X","publicationDate":"8/13/1959","genre":"romance","price":907.7},
+{"title":"redefine real-time architectures","author":"J. R. R. Tolkein","isbn":"430627279-6","publicationDate":"1/28/1924","genre":"mystery","price":793.3},
+{"title":"exploit web-enabled infomediaries","author":"Ernest Hemingway","isbn":"215943548-1","publicationDate":"6/20/1904","genre":"mystery","price":524.06},
+{"title":"productize holistic methodologies","author":"George Orwell","isbn":"088936426-5","publicationDate":"12/19/1961","genre":"fiction","price":37.43},
+{"title":"enhance enterprise networks","author":"Agatha Christie","isbn":"129157430-1","publicationDate":"1/15/1952","genre":"romance","price":291.23},
+{"title":"reintermediate bleeding-edge content","author":"George Orwell","isbn":"435735314-9","publicationDate":"1/26/1938","genre":"fiction","price":13.24},
+{"title":"recontextualize front-end portals","author":"Alexander Dumas","isbn":"861217310-8","publicationDate":"1/10/1963","genre":"science fiction","price":320.55},
+{"title":"transform extensible paradigms","author":"George Orwell","isbn":"628896616-9","publicationDate":"12/9/1997","genre":"technology","price":514.01},
+{"title":"evolve mission-critical web services","author":"Alexander Dumas","isbn":"195788917-9","publicationDate":"10/31/1921","genre":"science fiction","price":657.58},
+{"title":"e-enable holistic supply-chains","author":"Agatha Christie","isbn":"694147923-X","publicationDate":"3/29/1905","genre":"mystery","price":150.69},
+{"title":"morph robust ROI","author":"Agatha Christie","isbn":"900853578-5","publicationDate":"11/2/1926","genre":"fiction","price":857.6},
+{"title":"morph visionary metrics","author":"Alexander Dumas","isbn":"054906069-3","publicationDate":"2/2/2019","genre":"non-fiction","price":2.48},
+{"title":"deliver seamless users","author":"Mark Twain","isbn":"413900165-8","publicationDate":"10/12/1974","genre":"mystery","price":984.09},
+{"title":"extend synergistic e-tailers","author":"George Orwell","isbn":"705377171-7","publicationDate":"12/13/1960","genre":"non-fiction","price":552.71},
+{"title":"exploit enterprise markets","author":"Ernest Hemingway","isbn":"919905932-0","publicationDate":"2/3/1927","genre":"romance","price":159.84},
+{"title":"implement strategic architectures","author":"Agatha Christie","isbn":"483761890-1","publicationDate":"1/5/1984","genre":"technology","price":794.23},
+{"title":"engage magnetic e-services","author":"Jane Austen","isbn":"916014098-4","publicationDate":"3/27/1989","genre":"romance","price":230.85},
+{"title":"facilitate ubiquitous eyeballs","author":"J. R. R. Tolkein","isbn":"516192669-4","publicationDate":"8/3/1900","genre":"fiction","price":348.72},
+{"title":"engineer rich e-tailers","author":"George Orwell","isbn":"736730149-7","publicationDate":"4/16/1974","genre":"romance","price":437.14},
+{"title":"architect seamless e-commerce","author":"George Orwell","isbn":"857786303-4","publicationDate":"6/7/2012","genre":"mystery","price":472.01},
+{"title":"expedite web-enabled bandwidth","author":"J. R. R. Tolkein","isbn":"867541244-4","publicationDate":"5/12/1930","genre":"fiction","price":945.21},
+{"title":"mesh B2C portals","author":"Mark Twain","isbn":"000432246-0","publicationDate":"11/13/2006","genre":"science fiction","price":739.0},
+{"title":"redefine granular applications","author":"Alexander Dumas","isbn":"303431906-1","publicationDate":"9/24/1941","genre":"science fiction","price":99.88},
+{"title":"drive out-of-the-box deliverables","author":"J. R. R. Tolkein","isbn":"277380270-5","publicationDate":"7/25/1921","genre":"science fiction","price":529.19},
+{"title":"mesh cross-media markets","author":"Mark Twain","isbn":"325545781-5","publicationDate":"7/11/1935","genre":"non-fiction","price":310.98},
+{"title":"transform visionary solutions","author":"Alexander Dumas","isbn":"534441293-2","publicationDate":"4/7/2010","genre":"science fiction","price":485.59},
+{"title":"incentivize sticky systems","author":"J. R. R. Tolkein","isbn":"241742986-1","publicationDate":"3/2/1966","genre":"technology","price":622.31},
+{"title":"engineer sticky channels","author":"Jane Austen","isbn":"548575882-7","publicationDate":"2/8/1975","genre":"non-fiction","price":133.03},
+{"title":"repurpose open-source architectures","author":"Jane Austen","isbn":"744705083-0","publicationDate":"1/31/2019","genre":"mystery","price":722.45},
+{"title":"productize cross-platform experiences","author":"George Orwell","isbn":"964690575-7","publicationDate":"11/28/1923","genre":"romance","price":853.65},
+{"title":"scale customized e-services","author":"Ernest Hemingway","isbn":"820923560-5","publicationDate":"2/21/1950","genre":"mystery","price":414.24},
+{"title":"visualize magnetic mindshare","author":"Ernest Hemingway","isbn":"141342049-4","publicationDate":"7/29/1928","genre":"non-fiction","price":361.36},
+{"title":"synthesize visionary e-commerce","author":"Mark Twain","isbn":"281822624-4","publicationDate":"4/13/1998","genre":"non-fiction","price":711.7},
+{"title":"iterate wireless methodologies","author":"Jane Austen","isbn":"691581457-4","publicationDate":"3/14/1957","genre":"fiction","price":528.8},
+{"title":"brand interactive solutions","author":"Ernest Hemingway","isbn":"416732393-1","publicationDate":"3/3/1985","genre":"science fiction","price":716.24},
+{"title":"synergize holistic markets","author":"Alexander Dumas","isbn":"919662584-8","publicationDate":"3/11/1958","genre":"romance","price":822.84},
+{"title":"architect collaborative communities","author":"George Orwell","isbn":"414215700-0","publicationDate":"1/9/1960","genre":"non-fiction","price":438.45},
+{"title":"productize collaborative portals","author":"J. R. R. Tolkein","isbn":"258011938-8","publicationDate":"3/14/1907","genre":"romance","price":609.71},
+{"title":"optimize visionary portals","author":"Mark Twain","isbn":"419912100-5","publicationDate":"9/1/1972","genre":"technology","price":332.21},
+{"title":"engineer compelling convergence","author":"Stephen King","isbn":"208260687-2","publicationDate":"2/7/1905","genre":"non-fiction","price":378.1},
+{"title":"orchestrate extensible technologies","author":"Jane Austen","isbn":"331226248-8","publicationDate":"6/9/1998","genre":"romance","price":699.31},
+{"title":"syndicate compelling partnerships","author":"George Orwell","isbn":"514348378-6","publicationDate":"4/3/1959","genre":"non-fiction","price":854.27},
+{"title":"harness granular action-items","author":"Jane Austen","isbn":"365130945-2","publicationDate":"3/11/2004","genre":"science fiction","price":780.76},
+{"title":"expedite intuitive paradigms","author":"Agatha Christie","isbn":"072384977-3","publicationDate":"4/19/1985","genre":"science fiction","price":521.47},
+{"title":"maximize virtual functionalities","author":"Stephen King","isbn":"722190184-8","publicationDate":"6/30/1957","genre":"non-fiction","price":707.84},
+{"title":"strategize one-to-one platforms","author":"Agatha Christie","isbn":"768573926-7","publicationDate":"3/12/1928","genre":"mystery","price":13.73},
+{"title":"whiteboard out-of-the-box paradigms","author":"J. R. R. Tolkein","isbn":"995334113-3","publicationDate":"2/7/1929","genre":"technology","price":672.99},
+{"title":"envisioneer interactive relationships","author":"Mark Twain","isbn":"126207135-6","publicationDate":"1/26/1901","genre":"non-fiction","price":902.12},
+{"title":"transform B2C metrics","author":"George Orwell","isbn":"052366650-0","publicationDate":"1/7/2017","genre":"technology","price":81.58},
+{"title":"matrix mission-critical supply-chains","author":"Stephen King","isbn":"833370184-1","publicationDate":"1/10/2000","genre":"science fiction","price":839.8},
+{"title":"extend 24/365 e-commerce","author":"Stephen King","isbn":"053125271-X","publicationDate":"9/10/1918","genre":"technology","price":49.95},
+{"title":"morph next-generation supply-chains","author":"George Orwell","isbn":"105625828-4","publicationDate":"12/30/2003","genre":"mystery","price":129.02},
+{"title":"target magnetic convergence","author":"J. R. R. Tolkein","isbn":"906767718-3","publicationDate":"3/24/1901","genre":"science fiction","price":860.83},
+{"title":"target cross-media networks","author":"Alexander Dumas","isbn":"982667419-2","publicationDate":"9/3/1955","genre":"romance","price":387.78},
+{"title":"whiteboard dot-com web-readiness","author":"Alexander Dumas","isbn":"699060543-X","publicationDate":"10/16/1913","genre":"fiction","price":397.52},
+{"title":"scale cutting-edge applications","author":"George Orwell","isbn":"136939880-8","publicationDate":"5/2/1973","genre":"fiction","price":589.77},
+{"title":"architect dot-com systems","author":"Ernest Hemingway","isbn":"359087698-0","publicationDate":"5/23/1937","genre":"fiction","price":291.11},
+{"title":"visualize bleeding-edge deliverables","author":"J. R. R. Tolkein","isbn":"588435656-0","publicationDate":"6/24/1994","genre":"technology","price":46.11},
+{"title":"brand sexy applications","author":"Stephen King","isbn":"544924379-0","publicationDate":"10/15/1946","genre":"mystery","price":209.52},
+{"title":"cultivate customized users","author":"George Orwell","isbn":"175941369-0","publicationDate":"5/9/1993","genre":"fiction","price":203.08},
+{"title":"transition scalable niches","author":"Mark Twain","isbn":"883528462-7","publicationDate":"11/1/1903","genre":"romance","price":391.0},
+{"title":"evolve 24/365 platforms","author":"Stephen King","isbn":"440484554-5","publicationDate":"3/25/1987","genre":"non-fiction","price":255.31},
+{"title":"redefine end-to-end platforms","author":"Jane Austen","isbn":"470034575-6","publicationDate":"4/24/1917","genre":"fiction","price":291.58},
+{"title":"maximize vertical eyeballs","author":"Mark Twain","isbn":"865977822-7","publicationDate":"10/29/1951","genre":"romance","price":567.34},
+{"title":"innovate open-source networks","author":"Agatha Christie","isbn":"797971434-2","publicationDate":"2/3/1915","genre":"mystery","price":550.33},
+{"title":"optimize seamless bandwidth","author":"Ernest Hemingway","isbn":"962024007-3","publicationDate":"6/29/1976","genre":"fiction","price":120.5},
+{"title":"brand sexy convergence","author":"Stephen King","isbn":"447705630-3","publicationDate":"10/22/1973","genre":"fiction","price":294.86},
+{"title":"extend web-enabled eyeballs","author":"Agatha Christie","isbn":"408636926-5","publicationDate":"2/1/1964","genre":"non-fiction","price":342.89},
+{"title":"deploy interactive eyeballs","author":"Mark Twain","isbn":"948174814-6","publicationDate":"3/5/1910","genre":"technology","price":975.94},
+{"title":"matrix mission-critical bandwidth","author":"J. R. R. Tolkein","isbn":"530110072-6","publicationDate":"5/9/1965","genre":"fiction","price":350.15},
+{"title":"enable sticky functionalities","author":"Mark Twain","isbn":"687607441-2","publicationDate":"6/19/1942","genre":"science fiction","price":983.51},
+{"title":"leverage user-centric ROI","author":"Stephen King","isbn":"098762064-9","publicationDate":"9/6/1932","genre":"non-fiction","price":449.97},
+{"title":"engage plug-and-play functionalities","author":"Alexander Dumas","isbn":"063819590-X","publicationDate":"7/11/1935","genre":"romance","price":876.56},
+{"title":"facilitate sexy relationships","author":"Mark Twain","isbn":"460349206-5","publicationDate":"6/3/2015","genre":"romance","price":348.44},
+{"title":"embrace holistic applications","author":"George Orwell","isbn":"131583975-X","publicationDate":"1/26/1972","genre":"non-fiction","price":49.61},
+{"title":"drive out-of-the-box relationships","author":"J. R. R. Tolkein","isbn":"884593704-6","publicationDate":"11/2/1905","genre":"science fiction","price":942.13},
+{"title":"redefine interactive experiences","author":"Agatha Christie","isbn":"084380225-1","publicationDate":"8/25/1917","genre":"technology","price":557.83},
+{"title":"scale global applications","author":"Agatha Christie","isbn":"024989045-3","publicationDate":"6/20/1997","genre":"fiction","price":64.4},
+{"title":"enable vertical supply-chains","author":"Ernest Hemingway","isbn":"278677594-9","publicationDate":"8/21/1911","genre":"science fiction","price":287.28},
+{"title":"redefine synergistic portals","author":"George Orwell","isbn":"372683376-5","publicationDate":"6/26/1969","genre":"technology","price":549.67},
+{"title":"strategize 24/7 e-business","author":"Mark Twain","isbn":"888356169-4","publicationDate":"2/12/1914","genre":"technology","price":621.02},
+{"title":"incentivize e-business platforms","author":"Agatha Christie","isbn":"736241798-5","publicationDate":"6/17/1936","genre":"science fiction","price":612.13},
+{"title":"implement value-added eyeballs","author":"J. R. R. Tolkein","isbn":"177266709-9","publicationDate":"12/4/1940","genre":"non-fiction","price":270.44},
+{"title":"embrace web-enabled models","author":"Jane Austen","isbn":"201250637-2","publicationDate":"4/6/1957","genre":"mystery","price":686.88},
+{"title":"aggregate plug-and-play models","author":"Stephen King","isbn":"207353274-8","publicationDate":"10/1/1905","genre":"non-fiction","price":422.51},
+{"title":"implement killer e-commerce","author":"J. R. R. Tolkein","isbn":"531351534-9","publicationDate":"6/10/2016","genre":"romance","price":811.53},
+{"title":"integrate 24/7 portals","author":"J. R. R. Tolkein","isbn":"709140566-8","publicationDate":"1/21/1906","genre":"mystery","price":517.2},
+{"title":"drive distributed niches","author":"J. R. R. Tolkein","isbn":"446126726-1","publicationDate":"1/20/1937","genre":"mystery","price":910.14},
+{"title":"reinvent open-source content","author":"Jane Austen","isbn":"066554272-0","publicationDate":"8/21/1962","genre":"mystery","price":586.28},
+{"title":"deploy granular ROI","author":"George Orwell","isbn":"710110305-7","publicationDate":"5/28/2003","genre":"science fiction","price":846.37},
+{"title":"strategize strategic relationships","author":"Mark Twain","isbn":"454317084-9","publicationDate":"7/28/1902","genre":"mystery","price":233.96},
+{"title":"engage one-to-one web-readiness","author":"George Orwell","isbn":"081547738-4","publicationDate":"9/16/1925","genre":"technology","price":744.29},
+{"title":"brand 24/7 niches","author":"Stephen King","isbn":"721018828-2","publicationDate":"7/15/2011","genre":"romance","price":290.37},
+{"title":"streamline 24/365 paradigms","author":"Alexander Dumas","isbn":"288390517-7","publicationDate":"3/12/1976","genre":"technology","price":452.1},
+{"title":"repurpose mission-critical bandwidth","author":"Alexander Dumas","isbn":"276094939-7","publicationDate":"12/16/1981","genre":"fiction","price":34.05},
+{"title":"envisioneer visionary niches","author":"J. R. R. Tolkein","isbn":"016659325-7","publicationDate":"5/26/1999","genre":"non-fiction","price":171.66},
+{"title":"scale visionary paradigms","author":"Alexander Dumas","isbn":"563478143-4","publicationDate":"6/7/2007","genre":"romance","price":12.11},
+{"title":"morph wireless e-services","author":"George Orwell","isbn":"968986901-9","publicationDate":"5/5/1960","genre":"science fiction","price":479.26},
+{"title":"harness out-of-the-box platforms","author":"Mark Twain","isbn":"070231255-X","publicationDate":"11/18/1903","genre":"science fiction","price":181.12},
+{"title":"engineer integrated experiences","author":"Stephen King","isbn":"387421322-6","publicationDate":"3/9/2018","genre":"fiction","price":700.56},
+{"title":"harness plug-and-play e-commerce","author":"Agatha Christie","isbn":"876570935-7","publicationDate":"4/17/1941","genre":"fiction","price":84.93},
+{"title":"cultivate viral architectures","author":"George Orwell","isbn":"058612945-6","publicationDate":"2/4/1916","genre":"romance","price":561.97},
+{"title":"embrace proactive action-items","author":"Agatha Christie","isbn":"704061286-0","publicationDate":"4/12/1935","genre":"romance","price":351.59},
+{"title":"aggregate virtual bandwidth","author":"Agatha Christie","isbn":"664881228-1","publicationDate":"1/22/2016","genre":"non-fiction","price":722.61},
+{"title":"integrate viral networks","author":"Alexander Dumas","isbn":"588830694-0","publicationDate":"10/21/1955","genre":"romance","price":174.83},
+{"title":"deploy virtual web services","author":"Mark Twain","isbn":"683502273-6","publicationDate":"9/18/2005","genre":"fiction","price":917.43},
+{"title":"unleash global metrics","author":"J. R. R. Tolkein","isbn":"919595320-5","publicationDate":"5/20/1958","genre":"romance","price":798.88},
+{"title":"incentivize bricks-and-clicks infrastructures","author":"Alexander Dumas","isbn":"248098837-6","publicationDate":"6/3/2018","genre":"non-fiction","price":180.22},
+{"title":"whiteboard global synergies","author":"Jane Austen","isbn":"064012769-X","publicationDate":"4/24/2022","genre":"fiction","price":814.28},
+{"title":"reintermediate enterprise vortals","author":"Stephen King","isbn":"340438885-2","publicationDate":"12/13/1992","genre":"non-fiction","price":403.45},
+{"title":"exploit impactful e-markets","author":"J. R. R. Tolkein","isbn":"070780230-X","publicationDate":"12/31/1900","genre":"technology","price":786.33},
+{"title":"benchmark killer infomediaries","author":"Jane Austen","isbn":"228371423-0","publicationDate":"5/9/2021","genre":"non-fiction","price":68.72},
+{"title":"deploy robust metrics","author":"Alexander Dumas","isbn":"702329407-4","publicationDate":"7/5/1920","genre":"non-fiction","price":974.08},
+{"title":"cultivate impactful communities","author":"J. R. R. Tolkein","isbn":"002020018-8","publicationDate":"12/19/1968","genre":"non-fiction","price":979.94},
+{"title":"unleash dot-com e-services","author":"Stephen King","isbn":"803759814-4","publicationDate":"2/21/1934","genre":"romance","price":171.98},
+{"title":"streamline cross-platform action-items","author":"Alexander Dumas","isbn":"126417947-2","publicationDate":"2/11/1926","genre":"technology","price":726.9},
+{"title":"engineer proactive e-business","author":"Agatha Christie","isbn":"122595340-5","publicationDate":"8/13/1903","genre":"technology","price":366.4},
+{"title":"monetize dot-com initiatives","author":"Jane Austen","isbn":"449352712-9","publicationDate":"7/10/1925","genre":"technology","price":592.79},
+{"title":"aggregate compelling e-markets","author":"Stephen King","isbn":"428052151-4","publicationDate":"3/4/1923","genre":"mystery","price":877.89},
+{"title":"enhance distributed action-items","author":"Alexander Dumas","isbn":"510488311-6","publicationDate":"2/17/1954","genre":"technology","price":915.97},
+{"title":"enhance dynamic ROI","author":"Stephen King","isbn":"110561834-X","publicationDate":"5/15/1916","genre":"fiction","price":869.17},
+{"title":"recontextualize plug-and-play portals","author":"J. R. R. Tolkein","isbn":"968180748-0","publicationDate":"3/18/1960","genre":"mystery","price":675.49},
+{"title":"enhance bricks-and-clicks experiences","author":"Mark Twain","isbn":"826439709-3","publicationDate":"3/26/1907","genre":"non-fiction","price":264.15},
+{"title":"expedite strategic web-readiness","author":"Alexander Dumas","isbn":"310047854-1","publicationDate":"2/18/1946","genre":"science fiction","price":566.79},
+{"title":"streamline global web services","author":"George Orwell","isbn":"389453425-7","publicationDate":"3/28/1935","genre":"romance","price":455.52},
+{"title":"benchmark transparent schemas","author":"J. R. R. Tolkein","isbn":"115587140-5","publicationDate":"8/27/1967","genre":"mystery","price":45.12},
+{"title":"streamline end-to-end communities","author":"Agatha Christie","isbn":"867590400-2","publicationDate":"11/29/1902","genre":"technology","price":127.42},
+{"title":"enable leading-edge channels","author":"Mark Twain","isbn":"463249608-1","publicationDate":"8/12/1986","genre":"science fiction","price":602.09},
+{"title":"repurpose cross-platform eyeballs","author":"Agatha Christie","isbn":"353817965-4","publicationDate":"5/13/1940","genre":"science fiction","price":952.76},
+{"title":"expedite bleeding-edge mindshare","author":"Jane Austen","isbn":"807998293-7","publicationDate":"2/18/1993","genre":"technology","price":486.9},
+{"title":"transform front-end markets","author":"Jane Austen","isbn":"490525209-1","publicationDate":"9/10/1992","genre":"technology","price":660.89},
+{"title":"envisioneer customized web-readiness","author":"Agatha Christie","isbn":"445642095-2","publicationDate":"2/9/1919","genre":"non-fiction","price":227.41},
+{"title":"integrate strategic niches","author":"Jane Austen","isbn":"474426377-1","publicationDate":"5/24/1940","genre":"romance","price":602.94},
+{"title":"morph B2C niches","author":"Alexander Dumas","isbn":"679099488-2","publicationDate":"11/25/2005","genre":"fiction","price":904.16}]
\ No newline at end of file
diff --git a/tests/incremental-json-api/server/mocks/book.js b/tests/incremental-json-api/server/mocks/book.js
new file mode 100644
index 00000000000..bf0b7cfbae0
--- /dev/null
+++ b/tests/incremental-json-api/server/mocks/book.js
@@ -0,0 +1,171 @@
+'use strict';
+const RAW_BOOKS = require('./MOCK_DATA.json');
+
+const DEFAULT_LIMIT = 20;
+const BOOKS = RAW_BOOKS.map((book, index) => {
+ return {
+ id: `${index + 1}`,
+ type: 'book',
+ attributes: book,
+ };
+});
+const AUTHORS = RAW_BOOKS.reduce((acc, book) => {
+ if (!acc.includes(book.author)) {
+ acc.push(book.author);
+ }
+ return acc;
+}, []).map((author, index) => {
+ const resource = {
+ id: `${index + 1}`,
+ type: 'author',
+ attributes: {
+ name: author,
+ },
+ };
+ return resource;
+});
+const CATEGORIES = RAW_BOOKS.reduce((acc, book) => {
+ if (!acc.includes(book.genre)) {
+ acc.push(book.genre);
+ }
+ return acc;
+}, []).map((category, index) => {
+ const resource = {
+ id: `${index + 1}`,
+ type: 'genre',
+ attributes: {
+ name: category,
+ },
+ };
+ return resource;
+});
+
+function getPage(books, page = 1, limit = DEFAULT_LIMIT) {
+ const start = (page - 1) * limit;
+ const end = page * limit;
+ return books.slice(start, end);
+}
+
+function buildLink(page = 1, limit = DEFAULT_LIMIT, filter, sort, author, genre) {
+ const url = '/api/books';
+ const params = [];
+ if (author) {
+ params.push(`author=${author}`);
+ }
+ if (filter) {
+ params.push(`filter=${filter}`);
+ }
+ if (genre) {
+ params.push(`genre=${genre}`);
+ }
+ if (limit) {
+ params.push(`limit=${limit}`);
+ }
+ if (page) {
+ params.push(`page=${page}`);
+ }
+ if (sort) {
+ params.push(`sort=${sort}`);
+ }
+
+ return params.length ? url + '?' + params.join('&') : url;
+}
+
+function getMeta(books, page, limit) {
+ return {
+ currentPage: page,
+ pagesTotal: Math.ceil(books.length / limit),
+ booksTotal: books.length,
+ };
+}
+
+function getLinks(books, page, limit, filter, sort, author, genre) {
+ const lastPage = Math.ceil(books.length / limit);
+ const links = {
+ self: buildLink(page, limit, filter, sort, author, genre),
+ first: buildLink(1, limit, filter, sort, author, genre),
+ last: buildLink(lastPage, limit, filter, sort, author, genre),
+ next: page < lastPage ? buildLink(page + 1, limit, filter, sort, author, genre) : null,
+ prev: page > 1 ? buildLink(page - 1, limit, filter, sort, author, genre) : null,
+ };
+ return links;
+}
+
+module.exports = function (app) {
+ const express = require('express');
+ const bookRouter = express.Router();
+ app.set('json spaces', 0);
+ app.set('env', 'production');
+
+ bookRouter.get('/', function (req, res) {
+ const { sort, filter, author, genre } = req.query;
+ let { page, limit } = req.query;
+ page = parseInt(page, 10) || 1;
+ limit = parseInt(limit, 10) || DEFAULT_LIMIT;
+ let books = BOOKS;
+
+ if (author) {
+ books = books.filter((book) => {
+ return book.attributes.author === author;
+ });
+ }
+
+ if (genre) {
+ books = books.filter((book) => {
+ return book.attributes.genre === genre;
+ });
+ }
+
+ if (filter) {
+ books = books.filter((book) => {
+ return book.attributes.title.toLowerCase().indexOf(filter.toLowerCase()) > -1;
+ });
+ }
+
+ if (sort) {
+ if (!filter && !author && !genre) {
+ books = books.slice();
+ }
+ const fields = sort.split(',').map((field) => field.split(':'));
+
+ books.sort((a, b) => {
+ for (const [field, order] of fields) {
+ const valA = field === 'publicationDate' ? new Date(a.attributes[field]).getTime() : a.attributes[field];
+ const valB = field === 'publicationDate' ? new Date(b.attributes[field]).getTime() : b.attributes[field];
+ if (valA === valB) {
+ continue;
+ }
+ if (order === 'asc') {
+ return valA > valB ? 1 : -1;
+ } else {
+ return valA < valB ? 1 : -1;
+ }
+ }
+ });
+ }
+
+ const data = getPage(books, page, limit);
+ const links = getLinks(books, page, limit, filter, sort, author, genre);
+ const meta = getMeta(books, page, limit);
+
+ res.json({
+ links,
+ meta,
+ data,
+ });
+ });
+
+ bookRouter.get('/genres', function (req, res) {
+ res.send({
+ data: CATEGORIES,
+ });
+ });
+
+ bookRouter.get('/authors', function (req, res) {
+ res.send({
+ data: AUTHORS,
+ });
+ });
+
+ app.use('/api/books', bookRouter);
+};
diff --git a/tests/incremental-json-api/testem.js b/tests/incremental-json-api/testem.js
new file mode 100644
index 00000000000..491eb29ca44
--- /dev/null
+++ b/tests/incremental-json-api/testem.js
@@ -0,0 +1,29 @@
+const customDotReporter = require('@ember-data/unpublished-test-infra/src/testem/custom-dot-reporter');
+
+// eslint-disable-next-line no-console
+console.log(`\n\nLaunching with ${process.env.TESTEM_CI_LAUNCHER || 'Chrome'}\n\n`);
+
+module.exports = {
+ test_page: 'tests/index.html?hidepassed&nocontainer',
+ disable_watching: true,
+ reporter: customDotReporter,
+ launch_in_ci: [process.env.TESTEM_CI_LAUNCHER || 'Chrome'],
+ launch_in_dev: ['Chrome'],
+ browser_start_timeout: 120,
+ browser_args: {
+ Chrome: {
+ ci: [
+ '--headless',
+ '--disable-dev-shm-usage',
+ '--disable-software-rasterizer',
+ '--mute-audio',
+ '--remote-debugging-port=0',
+ '--window-size=1440,900',
+ '--no-sandbox',
+ ],
+ },
+ Firefox: {
+ ci: ['--headless', '--width=1440', '--height=900'],
+ },
+ },
+};
diff --git a/tests/incremental-json-api/tests/.gitkeep b/tests/incremental-json-api/tests/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/incremental-json-api/tests/index.html b/tests/incremental-json-api/tests/index.html
new file mode 100644
index 00000000000..261e540d68e
--- /dev/null
+++ b/tests/incremental-json-api/tests/index.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+ JSON:API Tests
+
+
+
+ {{content-for "head"}}
+ {{content-for "test-head"}}
+
+
+
+
+
+ {{content-for "head-footer"}}
+ {{content-for "test-head-footer"}}
+
+
+ {{content-for "body"}}
+ {{content-for "test-body"}}
+
+
+
+
+
+
+
+
+
+
+
+ {{content-for "body-footer"}}
+ {{content-for "test-body-footer"}}
+
+
+
diff --git a/tests/incremental-json-api/tests/test-helper.js b/tests/incremental-json-api/tests/test-helper.js
new file mode 100644
index 00000000000..ad0e2125174
--- /dev/null
+++ b/tests/incremental-json-api/tests/test-helper.js
@@ -0,0 +1,23 @@
+import { setApplication } from '@ember/test-helpers';
+
+import * as QUnit from 'qunit';
+import { setup } from 'qunit-dom';
+
+import { start } from 'ember-qunit';
+
+import configureAsserts from '@ember-data/unpublished-test-infra/test-support/asserts';
+
+import Application from '../app';
+import config from '../config/environment';
+
+setup(QUnit.assert);
+configureAsserts(QUnit.hooks);
+
+setApplication(Application.create(config.APP));
+
+QUnit.config.testTimeout = 2000;
+QUnit.config.urlConfig.push({
+ id: 'enableoptionalfeatures',
+ label: 'Enable Opt Features',
+});
+start({ setupTestIsolationValidation: true });
diff --git a/tests/incremental-json-api/tsconfig.json b/tests/incremental-json-api/tsconfig.json
new file mode 100644
index 00000000000..3a781c7337e
--- /dev/null
+++ b/tests/incremental-json-api/tsconfig.json
@@ -0,0 +1,30 @@
+{
+ "include": ["app/**/*", "config/**/*", "tests/**/*"],
+ "baseUrl": ".",
+ "compilerOptions": {
+ "lib": ["DOM", "ESNext"],
+ "module": "esnext",
+ "target": "esnext",
+ "moduleResolution": "bundler",
+ "moduleDetection": "force",
+ "strict": true,
+ "downlevelIteration": true,
+ "skipLibCheck": true,
+ "allowSyntheticDefaultImports": true,
+ "forceConsistentCasingInFileNames": true,
+ "allowJs": true,
+
+ "noImplicitOverride": true,
+
+ "experimentalDecorators": true,
+
+ "incremental": true,
+
+ "noEmit": true,
+ "declaration": false,
+
+ "types": ["ember-source/types"],
+ "paths": {}
+ },
+ "references": []
+}
From bcaa4ac8846120926fa7bfe52fbec7cea5ee203e Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Mon, 26 Feb 2024 17:44:18 +0100
Subject: [PATCH 04/20] Try to test out extending with service
---
.../app/services/request-manager.ts | 22 +++++++++
.../app/services/store.ts | 47 ++-----------------
2 files changed, 27 insertions(+), 42 deletions(-)
create mode 100644 tests/incremental-json-api/app/services/request-manager.ts
diff --git a/tests/incremental-json-api/app/services/request-manager.ts b/tests/incremental-json-api/app/services/request-manager.ts
new file mode 100644
index 00000000000..19d32197cda
--- /dev/null
+++ b/tests/incremental-json-api/app/services/request-manager.ts
@@ -0,0 +1,22 @@
+import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
+import RequestManager from '@ember-data/request';
+import Fetch from '@ember-data/request/fetch';
+import { CacheHandler } from '@ember-data/store';
+
+const TestHandler = {
+ async request({ request }, next) {
+ console.log('TestHandler.request', request);
+ const newContext = await next(request);
+ console.log('TestHandler.response after fetch', newContext.response);
+ return next(newContext);
+ },
+};
+
+export default class Requests extends RequestManager {
+ constructor(args) {
+ super(args);
+ debugger;
+ this.use([LegacyNetworkHandler, TestHandler, Fetch]);
+ this.useCache(CacheHandler);
+ }
+}
diff --git a/tests/incremental-json-api/app/services/store.ts b/tests/incremental-json-api/app/services/store.ts
index 8e137da4dae..883e0e2c3e4 100644
--- a/tests/incremental-json-api/app/services/store.ts
+++ b/tests/incremental-json-api/app/services/store.ts
@@ -1,46 +1,9 @@
-import JSONAPICache from '@ember-data/json-api';
-import type Model from '@ember-data/model';
-import { instantiateRecord, teardownRecord } from '@ember-data/model';
-import { buildSchema, modelFor } from '@ember-data/model/hooks';
-import RequestManager from '@ember-data/request';
-import Fetch from '@ember-data/request/fetch';
-import { LifetimesService } from '@ember-data/request-utils';
-import DataStore, { CacheHandler } from '@ember-data/store';
-import type { CacheCapabilitiesManager } from '@ember-data/store/-types/q/cache-store-wrapper';
-import type { StableRecordIdentifier } from '@warp-drive/core-types';
-import type { Cache } from '@warp-drive/core-types/cache';
+import { service } from '@ember/service';
-import CONFIG from '../config/environment';
+import Store from 'ember-data/store';
-export default class Store extends DataStore {
- constructor(args: unknown) {
- super(args);
+import type RequestManager from '@ember-data/request';
- const manager = (this.requestManager = new RequestManager());
- manager.use([Fetch]);
- manager.useCache(CacheHandler);
-
- this.registerSchema(buildSchema(this));
- this.lifetimes = new LifetimesService(CONFIG);
- }
-
- override createCache(capabilities: CacheCapabilitiesManager): Cache {
- return new JSONAPICache(capabilities);
- }
-
- override instantiateRecord(
- identifier: StableRecordIdentifier,
- createRecordArgs: { [key: string]: unknown }
- ): unknown {
- return instantiateRecord.call(this, identifier, createRecordArgs);
- }
-
- override teardownRecord(record: Model): void {
- return teardownRecord.call(this, record);
- }
-
- // @ts-expect-error Not sure what the fix is here
- override modelFor(type: string) {
- return modelFor.call(this, type);
- }
+export default class MyStore extends Store {
+ @service declare requestManager: RequestManager;
}
From cf0d58043496d325d859b2ff1eb58e9ec0080394 Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Wed, 28 Feb 2024 16:14:19 +0100
Subject: [PATCH 05/20] Looks ugly but demonstrated the point
---
.../app/adapters/application.js | 5 +++++
.../incremental-json-api/app/routes/application.ts | 5 ++++-
.../app/services/request-manager.ts | 13 ++++++++-----
tests/incremental-json-api/app/services/store.js | 10 ++++++++++
tests/incremental-json-api/app/services/store.ts | 9 ---------
.../app/templates/application.hbs | 8 ++++++++
6 files changed, 35 insertions(+), 15 deletions(-)
create mode 100644 tests/incremental-json-api/app/adapters/application.js
create mode 100644 tests/incremental-json-api/app/services/store.js
delete mode 100644 tests/incremental-json-api/app/services/store.ts
diff --git a/tests/incremental-json-api/app/adapters/application.js b/tests/incremental-json-api/app/adapters/application.js
new file mode 100644
index 00000000000..265c3da331d
--- /dev/null
+++ b/tests/incremental-json-api/app/adapters/application.js
@@ -0,0 +1,5 @@
+import JSONAPIAdapter from '@ember-data/adapter/json-api';
+
+export default class ApplicationAdapter extends JSONAPIAdapter {
+ namespace = 'api';
+}
diff --git a/tests/incremental-json-api/app/routes/application.ts b/tests/incremental-json-api/app/routes/application.ts
index 8f630f67773..6d7aef1f86f 100644
--- a/tests/incremental-json-api/app/routes/application.ts
+++ b/tests/incremental-json-api/app/routes/application.ts
@@ -22,12 +22,15 @@ export default class ApplicationRoute extends Route {
const genres = this.store.request>({ url: '/api/books/genres' });
const authors = this.store.request>({ url: '/api/books/authors' });
const books = this.store.request>(query('book'));
+ const oldBooks = this.store.findAll('book');
+
+ const data = await Promise.all([genres, authors, books, oldBooks]);
- const data = await Promise.all([genres, authors, books]);
return {
genres: data[0].content.data!,
authors: data[1].content.data!,
allBooks: data[2].content,
+ oldBooks: Array.from(data[3]),
};
}
}
diff --git a/tests/incremental-json-api/app/services/request-manager.ts b/tests/incremental-json-api/app/services/request-manager.ts
index 19d32197cda..94afeaf220e 100644
--- a/tests/incremental-json-api/app/services/request-manager.ts
+++ b/tests/incremental-json-api/app/services/request-manager.ts
@@ -1,22 +1,25 @@
import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
import RequestManager from '@ember-data/request';
import Fetch from '@ember-data/request/fetch';
-import { CacheHandler } from '@ember-data/store';
+// import { CacheHandler } from '@ember-data/store';
const TestHandler = {
async request({ request }, next) {
console.log('TestHandler.request', request);
- const newContext = await next(request);
+ const newContext = await next(Object.assign({}, request));
console.log('TestHandler.response after fetch', newContext.response);
- return next(newContext);
+ return newContext;
},
};
export default class Requests extends RequestManager {
constructor(args) {
super(args);
- debugger;
this.use([LegacyNetworkHandler, TestHandler, Fetch]);
- this.useCache(CacheHandler);
+
+ // TODO: This fails due to implementation in Store. It always adds cache.
+ // Maybe we should change implementation, or just warn about not adding it
+
+ // this.useCache(CacheHandler);
}
}
diff --git a/tests/incremental-json-api/app/services/store.js b/tests/incremental-json-api/app/services/store.js
new file mode 100644
index 00000000000..f7233dd0ac8
--- /dev/null
+++ b/tests/incremental-json-api/app/services/store.js
@@ -0,0 +1,10 @@
+import { service } from '@ember/service';
+
+import Store from 'ember-data/store';
+
+// NOTE: This file must be JS extension as `ember-data` is still v1 addon,
+// and JS declaration will always "win" in final build of application
+
+export default class MyStore extends Store {
+ @service requestManager;
+}
diff --git a/tests/incremental-json-api/app/services/store.ts b/tests/incremental-json-api/app/services/store.ts
deleted file mode 100644
index 883e0e2c3e4..00000000000
--- a/tests/incremental-json-api/app/services/store.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { service } from '@ember/service';
-
-import Store from 'ember-data/store';
-
-import type RequestManager from '@ember-data/request';
-
-export default class MyStore extends Store {
- @service declare requestManager: RequestManager;
-}
diff --git a/tests/incremental-json-api/app/templates/application.hbs b/tests/incremental-json-api/app/templates/application.hbs
index dd4c468197e..353016a51c8 100644
--- a/tests/incremental-json-api/app/templates/application.hbs
+++ b/tests/incremental-json-api/app/templates/application.hbs
@@ -2,6 +2,14 @@
+
+ Old Books {{@model.oldBooks.length}}
+
+ {{#each @model.oldBooks as |book|}}
+ {{book.title}}
+ {{/each}}
+
+
Browse
From 777a724d7a297f1255eea73e663b5bc2ee40a01f Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Wed, 28 Feb 2024 22:39:01 +0100
Subject: [PATCH 06/20] Updates after 5.3.1 release verification. Also should
address most of review comments
---
guides/drafts/incremental-adoption-guide.md | 55 ++++++++++++++++-----
1 file changed, 43 insertions(+), 12 deletions(-)
diff --git a/guides/drafts/incremental-adoption-guide.md b/guides/drafts/incremental-adoption-guide.md
index dd496c9dc76..425b66b0d5a 100644
--- a/guides/drafts/incremental-adoption-guide.md
+++ b/guides/drafts/incremental-adoption-guide.md
@@ -12,33 +12,37 @@ This version of EmberData is the first version that supports the new APIs. It is
## Step 2: Add `Store` service to your application
-You will need to create your own store service. Before, a store service was automatically injected by EmberData.
+You will need to create your own store service. Before, a store service was automatically injected by EmberData.
Here is how you do it:
-```ts
+```js
// eslint-disable-next-line ember/use-ember-data-rfc-395-imports
import Store from 'ember-data/store';
import { service } from '@ember/service';
-import RequestManager from '@ember-data/request';
export default class MyStore extends Store {
- @service declare requestManager: RequestManager;
+ @service requestManager;
}
```
Notice we still want to import the `Store` class from `ember-data/store` package. You might have a lint rule that says don't do it. You can disable it for this import. The reason we want to import it from `ember-data/store` is because we want to use EmberData models, serializers, adapters, etc. while alongside we want to start utilizing new APIs.
+>> Note: You can also use `@ember-data/store` package, but you will need to configure a lot more to make things work to use old APIs. We recommend using `ember-data/store` package to avoid confusion.
+>> Note: Because we are extending `ember-data/store`, it is still v1 addon, so things might not work for you if you are using typescript. We recommend to have `store.js` file for now.
+
## Step 3: Add `RequestManager` service to your application
-Now let's create our very own `RequestManager` service. It is a service that is responsible for sending requests to the server. It is a composable class, which means you can add your own request handlers to it. In the example below we are adding `LegacyNetworkHandler`, `TestHandler` and `Fetch` handlers.
+Now let's create our very own `RequestManager` service. It is a service that is responsible for sending requests to the server. It is a composable class, which means you can add your own request handlers to it.
+
+First you need to install [`@ember-data/request`](https://github.com/emberjs/data/tree/main/packages/request) and [`@ember-data/legacy-compat`](https://github.com/emberjs/data/tree/main/packages/legacy-compat) packages. First contains the `RequestManager` service and a few request handlers, second has `LegacyNetworkHandler` that gonna handle all old-style `this.store.*` calls.
+
+Here is how your own `RequestManager` service may look like:
-```ts
+```js
import RequestManager from '@ember-data/request';
import Fetch from '@ember-data/request/fetch';
import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
-import { CacheHandler } from 'ember-data/store';
-import { setBuildURLConfig } from '@ember-data/request-utils';
const TestHandler = {
async request({ request }, next) {
@@ -56,7 +60,6 @@ export default class Requests extends RequestManager {
constructor(args) {
super(args);
this.use([LegacyNetworkHandler, TestHandler, Fetch]);
- this.useCache(CacheHandler);
}
}
```
@@ -69,13 +72,17 @@ Let's go over the code above:
3. Lastly `Fetch`. It is a handler that sends requests to the server using the `fetch` API. It expects responses to be JSON and when in use it should be the last handler you put in the chain. After finishing each request it will convert the response into json and pass it back to the handlers chain in reverse order as the request context's response. So `TestHandler` will receive `response` property first, and so on if we would have any.
-You can read more about request manager in the [request manager guide](./request-manager-guide.md).
+>> NOTE: Your `RequestManager` service should be exactly `app/services/request-manager.[js|ts]` file. It is a convention that Ember uses to find the service.
+
+You can read more about request manager in the [request manager guide](../requests/index.md).
## Step 4: Install `@ember-data/json-api`, `@ember-data/request-utils` packages
-If you were using JSON:API adapter/serializer for your backend communication, you can use `@ember-data/json-api` package. It is a package that contains predefined builders for JSON:API requests. You can read more about it in the [`@ember-data/json-api` guide](TODO: add link).
+If you were using JSON:API adapter/serializer for your backend communication, you can use `@ember-data/json-api` package. It is a package that contains predefined builders for JSON:API requests. You can read more about it in the [`@ember-data/json-api`](https://github.com/emberjs/data/tree/main/packages/json-api).
+
+If you have different backend format - EmberData provides you with builders for `REST`([`@ember-data/rest`](https://github.com/emberjs/data/tree/main/packages/rest)) and `ActiveRecord`([`@ember-data/active-record`](https://github.com/emberjs/data/tree/main/packages/active-record)).
-If you have different backend format - EmberData provides you with builders for `REST`(@ember-data/rest) and `ActiveRecord`(@ember-data/active-record).
+`@ember-data/request-utils` package contains a lot of useful utilities for building requests. You can read more about it in its [Readme](https://github.com/emberjs/data/tree/main/packages/request-utils#readme). It has request builders for all type of requests.
## Step 5: Off you go! Start using new APIs
@@ -113,3 +120,27 @@ export default class AuthHandler {
}
```
+You can read more about auth topic [here](../requests/auth.md).
+
+Another good thing to do is to configure default host and namespace for your requests. There is an utility for that out of the box of `@ember-data/request-utils` called [`setBuildURLConfig`](https://github.com/emberjs/data/blob/main/packages/request-utils/src/index.ts#L67). You can do it anywhere in your app theoretically, but we recommend doing it in the `app/app.js` file. Here is how you can do it:
+
+```diff app/app.js
+import Application from '@ember/application';
+import Resolver from 'ember-resolver';
+import loadInitializers from 'ember-load-initializers';
+import config from 'base-ember-typescript-app/config/environment';
++import { setBuildURLConfig } from '@ember-data/request-utils';
+
+export default class App extends Application {
+ modulePrefix = config.modulePrefix;
+ podModulePrefix = config.podModulePrefix;
+ Resolver = Resolver;
+}
+
+loadInitializers(App, config.modulePrefix);
+
++setBuildURLConfig({
++ host: 'https://api.example.com',
++ namespace: 'v1',
++});
+```
From 489178f3fcaee9216574c7313ffc16776ec29daa Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Wed, 28 Feb 2024 22:47:12 +0100
Subject: [PATCH 07/20] MD fixes for notes
---
guides/drafts/incremental-adoption-guide.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/guides/drafts/incremental-adoption-guide.md b/guides/drafts/incremental-adoption-guide.md
index 425b66b0d5a..d965f384f45 100644
--- a/guides/drafts/incremental-adoption-guide.md
+++ b/guides/drafts/incremental-adoption-guide.md
@@ -28,13 +28,14 @@ export default class MyStore extends Store {
Notice we still want to import the `Store` class from `ember-data/store` package. You might have a lint rule that says don't do it. You can disable it for this import. The reason we want to import it from `ember-data/store` is because we want to use EmberData models, serializers, adapters, etc. while alongside we want to start utilizing new APIs.
->> Note: You can also use `@ember-data/store` package, but you will need to configure a lot more to make things work to use old APIs. We recommend using `ember-data/store` package to avoid confusion.
->> Note: Because we are extending `ember-data/store`, it is still v1 addon, so things might not work for you if you are using typescript. We recommend to have `store.js` file for now.
+> Note: You can also use `@ember-data/store` package, but you will need to configure a lot more to make things work to use old APIs. We recommend using `ember-data/store` package to avoid confusion.
+
+> Note: Because we are extending `ember-data/store`, it is still v1 addon, so things might not work for you if you are using typescript. We recommend to have `store.js` file for now.
## Step 3: Add `RequestManager` service to your application
Now let's create our very own `RequestManager` service. It is a service that is responsible for sending requests to the server. It is a composable class, which means you can add your own request handlers to it.
-
+
First you need to install [`@ember-data/request`](https://github.com/emberjs/data/tree/main/packages/request) and [`@ember-data/legacy-compat`](https://github.com/emberjs/data/tree/main/packages/legacy-compat) packages. First contains the `RequestManager` service and a few request handlers, second has `LegacyNetworkHandler` that gonna handle all old-style `this.store.*` calls.
Here is how your own `RequestManager` service may look like:
@@ -72,7 +73,7 @@ Let's go over the code above:
3. Lastly `Fetch`. It is a handler that sends requests to the server using the `fetch` API. It expects responses to be JSON and when in use it should be the last handler you put in the chain. After finishing each request it will convert the response into json and pass it back to the handlers chain in reverse order as the request context's response. So `TestHandler` will receive `response` property first, and so on if we would have any.
->> NOTE: Your `RequestManager` service should be exactly `app/services/request-manager.[js|ts]` file. It is a convention that Ember uses to find the service.
+> NOTE: Your `RequestManager` service should be exactly `app/services/request-manager.[js|ts]` file. It is a convention that Ember uses to find the service.
You can read more about request manager in the [request manager guide](../requests/index.md).
From d0d9e951fa1591614cacc0b50b3e66f362b0d36c Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Sat, 2 Mar 2024 10:46:16 +0100
Subject: [PATCH 08/20] Typing request manager
---
.../app/services/request-manager.ts | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/tests/incremental-json-api/app/services/request-manager.ts b/tests/incremental-json-api/app/services/request-manager.ts
index 94afeaf220e..2f7bd3bd5c1 100644
--- a/tests/incremental-json-api/app/services/request-manager.ts
+++ b/tests/incremental-json-api/app/services/request-manager.ts
@@ -1,14 +1,15 @@
import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
+import type { Handler, NextFn, RequestContext } from '@ember-data/request';
import RequestManager from '@ember-data/request';
import Fetch from '@ember-data/request/fetch';
-// import { CacheHandler } from '@ember-data/store';
-const TestHandler = {
- async request({ request }, next) {
- console.log('TestHandler.request', request);
- const newContext = await next(Object.assign({}, request));
+/* eslint-disable no-console */
+const TestHandler: Handler = {
+ async request(context: RequestContext, next: NextFn) {
+ console.log('TestHandler.request', context.request);
+ const newContext = await next(Object.assign({}, context.request));
console.log('TestHandler.response after fetch', newContext.response);
- return newContext;
+ return newContext as T;
},
};
@@ -16,10 +17,5 @@ export default class Requests extends RequestManager {
constructor(args) {
super(args);
this.use([LegacyNetworkHandler, TestHandler, Fetch]);
-
- // TODO: This fails due to implementation in Store. It always adds cache.
- // Maybe we should change implementation, or just warn about not adding it
-
- // this.useCache(CacheHandler);
}
}
From e7aecb717a6a53a07a4fcae93cc97add3a50120f Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Sat, 2 Mar 2024 10:46:25 +0100
Subject: [PATCH 09/20] Create cookbook folder in guides
---
.../incremental-adoption-guide.md | 21 +++++++++----------
guides/cookbook/index.md | 3 +++
guides/index.md | 1 +
3 files changed, 14 insertions(+), 11 deletions(-)
rename guides/{drafts => cookbook}/incremental-adoption-guide.md (95%)
create mode 100644 guides/cookbook/index.md
diff --git a/guides/drafts/incremental-adoption-guide.md b/guides/cookbook/incremental-adoption-guide.md
similarity index 95%
rename from guides/drafts/incremental-adoption-guide.md
rename to guides/cookbook/incremental-adoption-guide.md
index d965f384f45..0c1b140c4e7 100644
--- a/guides/drafts/incremental-adoption-guide.md
+++ b/guides/cookbook/incremental-adoption-guide.md
@@ -40,20 +40,19 @@ First you need to install [`@ember-data/request`](https://github.com/emberjs/dat
Here is how your own `RequestManager` service may look like:
-```js
+```ts
+import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
+import type { Handler, NextFn, RequestContext } from '@ember-data/request';
import RequestManager from '@ember-data/request';
import Fetch from '@ember-data/request/fetch';
-import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
-
-const TestHandler = {
- async request({ request }, next) {
- console.log('TestHandler.request', request);
-
- const newContext = await next(request);
+/* eslint-disable no-console */
+const TestHandler: Handler = {
+ async request(context: RequestContext, next: NextFn) {
+ console.log('TestHandler.request', context.request);
+ const newContext = await next(Object.assign({}, context.request));
console.log('TestHandler.response after fetch', newContext.response);
-
- return next(newContext);
+ return newContext as T;
},
};
@@ -103,7 +102,7 @@ Now you can start refactoring old code to use new APIs. You can start with the `
You most likely would need to add Auth Handler to your request manager to add `accessToken` to your requests.
Let's say you have your `accessToken` in the `session` service. Here is how you can add it to the request manager:
-```js auth-handler.js
+```js
import { inject as service } from '@ember/service';
export default class AuthHandler {
diff --git a/guides/cookbook/index.md b/guides/cookbook/index.md
new file mode 100644
index 00000000000..53df945e865
--- /dev/null
+++ b/guides/cookbook/index.md
@@ -0,0 +1,3 @@
+# Cookbook
+
+- [Incremental Adoption Guide](./incremental-adoption-guide.md)
diff --git a/guides/index.md b/guides/index.md
index 08f5c6c731c..0a7f07f0a53 100644
--- a/guides/index.md
+++ b/guides/index.md
@@ -3,3 +3,4 @@
- [Relationships](./relationships/index.md)
- [Requests](./requests/index.md)
- [Terminology](./terminology.md)
+- [Cookbook](./cookbook/index.md)
From 0d2ef7a361fcf2dd716122703bc1c9ce16782a02 Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Sun, 10 Mar 2024 14:08:13 +0100
Subject: [PATCH 10/20] Move around setBuildUrlConfig
---
guides/cookbook/incremental-adoption-guide.md | 10 +++++-----
tests/incremental-json-api/app/app.ts | 7 +++++++
tests/incremental-json-api/app/routes/application.ts | 6 ------
3 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/guides/cookbook/incremental-adoption-guide.md b/guides/cookbook/incremental-adoption-guide.md
index 0c1b140c4e7..eb6f73c5909 100644
--- a/guides/cookbook/incremental-adoption-guide.md
+++ b/guides/cookbook/incremental-adoption-guide.md
@@ -130,6 +130,11 @@ import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'base-ember-typescript-app/config/environment';
+import { setBuildURLConfig } from '@ember-data/request-utils';
++
++setBuildURLConfig({
++ host: 'https://api.example.com',
++ namespace: 'v1',
++});
export default class App extends Application {
modulePrefix = config.modulePrefix;
@@ -138,9 +143,4 @@ export default class App extends Application {
}
loadInitializers(App, config.modulePrefix);
-
-+setBuildURLConfig({
-+ host: 'https://api.example.com',
-+ namespace: 'v1',
-+});
```
diff --git a/tests/incremental-json-api/app/app.ts b/tests/incremental-json-api/app/app.ts
index 8f235d166e6..270d3147ca9 100644
--- a/tests/incremental-json-api/app/app.ts
+++ b/tests/incremental-json-api/app/app.ts
@@ -2,9 +2,16 @@ import Application from '@ember/application';
import loadInitializers from 'ember-load-initializers';
+import { setBuildURLConfig } from '@ember-data/request-utils';
+
import config from './config/environment';
import Resolver from './resolver';
+setBuildURLConfig({
+ host: '/',
+ namespace: 'api',
+});
+
class App extends Application {
modulePrefix = config.modulePrefix;
podModulePrefix = config.podModulePrefix;
diff --git a/tests/incremental-json-api/app/routes/application.ts b/tests/incremental-json-api/app/routes/application.ts
index 6d7aef1f86f..9a120ca6823 100644
--- a/tests/incremental-json-api/app/routes/application.ts
+++ b/tests/incremental-json-api/app/routes/application.ts
@@ -2,7 +2,6 @@ import Route from '@ember/routing/route';
import { service } from '@ember/service';
import { query } from '@ember-data/json-api/request';
-import { setBuildURLConfig } from '@ember-data/request-utils';
import type Store from '@ember-data/store';
import type { Document } from '@ember-data/store/-private/document';
@@ -10,11 +9,6 @@ import type Author from '../models/author';
import type Book from '../models/book';
import type Genre from '../models/genre';
-setBuildURLConfig({
- host: '/',
- namespace: 'api',
-});
-
export default class ApplicationRoute extends Route {
@service declare store: Store;
From e8c486f2636464f8ac0cf632c4b7deafdaee4d9f Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Mon, 11 Mar 2024 15:34:37 +0100
Subject: [PATCH 11/20] Update layout for test app, make it look like rest of
columns
---
.../app/templates/application.hbs | 22 +++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/tests/incremental-json-api/app/templates/application.hbs b/tests/incremental-json-api/app/templates/application.hbs
index 353016a51c8..df905f4190f 100644
--- a/tests/incremental-json-api/app/templates/application.hbs
+++ b/tests/incremental-json-api/app/templates/application.hbs
@@ -2,14 +2,7 @@
-
- Old Books {{@model.oldBooks.length}}
-
- {{#each @model.oldBooks as |book|}}
- {{book.title}}
- {{/each}}
-
-
+
Browse
@@ -23,4 +16,15 @@
-{{outlet}}
\ No newline at end of file
+{{outlet}}
+
+ Old Books({{@model.oldBooks.length}})
+
+ {{#each @model.oldBooks as |book|}}
+
+ {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
+ by {{book.author}} ISBN: {{book.isbn}}
+
+ {{/each}}
+
+
\ No newline at end of file
From 43bcb68d4a9a020ba0dc0897eff6befe59f41df3 Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Mon, 11 Mar 2024 21:25:06 +0100
Subject: [PATCH 12/20] Add more legacy examples, update layout
---
.../app/components/legacy-infinite-books.hbs | 15 ++++++
.../app/components/legacy-infinite-books.ts | 48 +++++++++++++++++++
tests/incremental-json-api/app/models/book.ts | 3 ++
.../app/routes/application.ts | 14 ++++--
.../app/templates/application.hbs | 37 +++++++++-----
5 files changed, 102 insertions(+), 15 deletions(-)
create mode 100644 tests/incremental-json-api/app/components/legacy-infinite-books.hbs
create mode 100644 tests/incremental-json-api/app/components/legacy-infinite-books.ts
diff --git a/tests/incremental-json-api/app/components/legacy-infinite-books.hbs b/tests/incremental-json-api/app/components/legacy-infinite-books.hbs
new file mode 100644
index 00000000000..f88275006ad
--- /dev/null
+++ b/tests/incremental-json-api/app/components/legacy-infinite-books.hbs
@@ -0,0 +1,15 @@
+
+
+ {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
+ by {{book.author}} ISBN: {{book.isbn}}
+
+
\ No newline at end of file
diff --git a/tests/incremental-json-api/app/components/legacy-infinite-books.ts b/tests/incremental-json-api/app/components/legacy-infinite-books.ts
new file mode 100644
index 00000000000..151b40a1aea
--- /dev/null
+++ b/tests/incremental-json-api/app/components/legacy-infinite-books.ts
@@ -0,0 +1,48 @@
+import { service } from '@ember/service';
+import Component from '@glimmer/component';
+import { tracked } from '@glimmer/tracking';
+
+import type Store from '@ember-data/store';
+import type { Collection } from '@ember-data/store/-private/record-arrays/identifier-array';
+
+import type Book from '../models/book';
+
+export interface InfiniteBookSignature {
+ Element: HTMLUListElement;
+ Args: {
+ allBooks: Collection;
+ };
+}
+
+class Pages {
+ @tracked pages: Collection[] = [];
+ @tracked data: T[] = [];
+
+ constructor(page: Collection) {
+ this.pages = [page];
+ this.data = page.slice();
+ }
+
+ addPage(page: Collection) {
+ this.pages.push(page);
+ this.data = this.data.concat(page);
+ }
+}
+
+export default class InfiniteBookComponent extends Component {
+ @service declare store: Store;
+ pageCollection = new Pages(this.args.allBooks);
+
+ get books(): Book[] {
+ return this.pageCollection.data;
+ }
+
+ next = async () => {
+ const meta = this.pageCollection.pages.at(-1)?.query as { page: number; pageSize: number };
+ if (!meta) {
+ return;
+ }
+ const result = await this.store.query('book', { page: meta.page + 1, pageSize: meta.pageSize });
+ this.pageCollection.addPage(result);
+ };
+}
diff --git a/tests/incremental-json-api/app/models/book.ts b/tests/incremental-json-api/app/models/book.ts
index b1044c5d710..0cf69b427ea 100644
--- a/tests/incremental-json-api/app/models/book.ts
+++ b/tests/incremental-json-api/app/models/book.ts
@@ -1,4 +1,5 @@
import Model, { attr } from '@ember-data/model';
+import { ResourceType } from '@warp-drive/core-types/symbols';
export default class Book extends Model {
@attr declare title: string;
@@ -6,4 +7,6 @@ export default class Book extends Model {
@attr declare publicationDate: string;
@attr declare author: string;
@attr declare genre: string;
+
+ [ResourceType] = 'book' as const;
}
diff --git a/tests/incremental-json-api/app/routes/application.ts b/tests/incremental-json-api/app/routes/application.ts
index 9a120ca6823..480a77d19ae 100644
--- a/tests/incremental-json-api/app/routes/application.ts
+++ b/tests/incremental-json-api/app/routes/application.ts
@@ -15,16 +15,24 @@ export default class ApplicationRoute extends Route {
override async model() {
const genres = this.store.request>({ url: '/api/books/genres' });
const authors = this.store.request>({ url: '/api/books/authors' });
- const books = this.store.request>(query('book'));
+
+ // Example of legacy usage to be refactored, unpaginated
const oldBooks = this.store.findAll('book');
- const data = await Promise.all([genres, authors, books, oldBooks]);
+ // Example of legacy usage, paginated
+ const oldBooksPaginated = this.store.query('book', { page: 1, pageSize: 20 });
+
+ // Example of new usage (refactored, paginated)
+ const books = this.store.request>(query('book'));
+
+ const data = await Promise.all([genres, authors, books, oldBooks, oldBooksPaginated]);
return {
genres: data[0].content.data!,
authors: data[1].content.data!,
allBooks: data[2].content,
- oldBooks: Array.from(data[3]),
+ oldBooks: data[3],
+ oldBooksPaginated: data[4],
};
}
}
diff --git a/tests/incremental-json-api/app/templates/application.hbs b/tests/incremental-json-api/app/templates/application.hbs
index df905f4190f..1d4539f2c5f 100644
--- a/tests/incremental-json-api/app/templates/application.hbs
+++ b/tests/incremental-json-api/app/templates/application.hbs
@@ -16,15 +16,28 @@
-{{outlet}}
-
- Old Books({{@model.oldBooks.length}})
-
- {{#each @model.oldBooks as |book|}}
-
- {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
- by {{book.author}} ISBN: {{book.isbn}}
-
- {{/each}}
-
-
\ No newline at end of file
+
+
+
+
+ Old Books (All) ({{@model.oldBooks.length}})
+
+ {{#each @model.oldBooks as |book|}}
+
+ {{book.title}} ({{book.genre}}) - {{book.publicationDate}}
+ by {{book.author}} ISBN: {{book.isbn}}
+
+ {{/each}}
+
+
+
+ Old Books (Paginated) ({{@model.oldBooksPaginated.length}})
+
+
+
+
+
+
+
+
+{{outlet}}
\ No newline at end of file
From 687fc0b37e582da098e6b3758488298c520b9b3d Mon Sep 17 00:00:00 2001
From: Kirill Shaplyko
Date: Tue, 12 Mar 2024 21:05:39 +0100
Subject: [PATCH 13/20] Move around things and make json-api example app
---
pnpm-lock.yaml | 658 +++++++----
.../.eslintrc.cjs | 0
.../README.md | 0
.../app/adapters/application.js | 0
.../app/app.ts | 0
.../app/components/.gitkeep | 0
.../app/components/book-list.hbs | 0
.../app/components/book-list.ts | 0
.../app/components/book-search.hbs | 0
.../app/components/book-search.ts | 0
.../app/components/infinite-books.hbs | 0
.../app/components/infinite-books.ts | 0
.../app/components/legacy-infinite-books.hbs | 0
.../app/components/legacy-infinite-books.ts | 0
.../app/components/page-link.hbs | 0
.../app/config/environment.d.ts | 0
.../app/helpers/.gitkeep | 0
.../app/helpers/add.ts | 0
.../app/helpers/and.ts | 0
.../app/helpers/eq.ts | 0
.../app/helpers/gt.ts | 0
.../app/helpers/lt.ts | 0
.../app/helpers/mod.ts | 0
.../app/helpers/neq.ts | 0
.../app/helpers/not.ts | 0
.../app/helpers/or.ts | 0
.../app/helpers/sub.ts | 0
.../app/index.html | 6 +-
.../app/models/.gitkeep | 0
.../app/models/author.ts | 0
.../app/models/book.ts | 0
.../app/models/genre.ts | 0
.../app/resolver.ts | 0
.../app/router.ts | 0
.../app/routes/.gitkeep | 0
.../app/routes/application.ts | 0
.../app/services/request-manager.ts | 0
.../app/services/store.js | 0
.../app/styles/app.css | 0
.../app/templates/.gitkeep | 0
.../app/templates/application.hbs | 0
.../app/utils/pagination-links.ts | 0
.../config/environment.js | 2 +-
.../config/optional-features.json | 0
.../config/targets.js | 0
.../ember-cli-build.js | 0
.../package.json | 2 +-
.../server/index.js | 0
.../server/mocks/MOCK_DATA.json | 0
.../server/mocks/book.js | 0
.../testem.js | 0
.../tests/.gitkeep | 0
.../tests/index.html | 4 +-
.../tests/test-helper.js | 0
.../tsconfig.json | 0
.../app/utils/pagination-links.ts | 69 --
.../config/environment.js | 49 -
tests/incremental-json-api/tests/index.html | 68 --
tests/recommended-json-api/.eslintrc.cjs | 45 -
tests/recommended-json-api/README.md | 3 -
tests/recommended-json-api/app/app.ts | 16 -
.../app/components/.gitkeep | 0
.../app/components/book-list.hbs | 22 -
.../app/components/book-list.ts | 81 --
.../app/components/book-search.hbs | 63 --
.../app/components/book-search.ts | 56 -
.../app/components/infinite-books.hbs | 15 -
.../app/components/infinite-books.ts | 47 -
.../app/components/page-link.hbs | 3 -
.../app/config/environment.d.ts | 18 -
.../recommended-json-api/app/helpers/.gitkeep | 0
tests/recommended-json-api/app/helpers/add.ts | 3 -
tests/recommended-json-api/app/helpers/and.ts | 3 -
tests/recommended-json-api/app/helpers/eq.ts | 3 -
tests/recommended-json-api/app/helpers/gt.ts | 3 -
tests/recommended-json-api/app/helpers/lt.ts | 3 -
tests/recommended-json-api/app/helpers/mod.ts | 3 -
tests/recommended-json-api/app/helpers/neq.ts | 3 -
tests/recommended-json-api/app/helpers/not.ts | 3 -
tests/recommended-json-api/app/helpers/or.ts | 3 -
tests/recommended-json-api/app/helpers/sub.ts | 3 -
tests/recommended-json-api/app/index.html | 25 -
.../recommended-json-api/app/models/.gitkeep | 0
.../recommended-json-api/app/models/author.ts | 5 -
tests/recommended-json-api/app/models/book.ts | 9 -
.../recommended-json-api/app/models/genre.ts | 5 -
tests/recommended-json-api/app/resolver.ts | 3 -
tests/recommended-json-api/app/router.ts | 12 -
.../recommended-json-api/app/routes/.gitkeep | 0
.../app/routes/application.ts | 33 -
.../app/services/store.ts | 49 -
tests/recommended-json-api/app/styles/app.css | 56 -
.../app/templates/.gitkeep | 0
.../app/templates/application.hbs | 18 -
.../config/optional-features.json | 6 -
tests/recommended-json-api/config/targets.js | 13 -
tests/recommended-json-api/ember-cli-build.js | 40 -
tests/recommended-json-api/server/index.js | 34 -
.../server/mocks/MOCK_DATA.json | 1000 -----------------
.../recommended-json-api/server/mocks/book.js | 171 ---
tests/recommended-json-api/testem.js | 29 -
tests/recommended-json-api/tests/.gitkeep | 0
.../recommended-json-api/tests/test-helper.js | 23 -
tests/recommended-json-api/tsconfig.json | 30 -
104 files changed, 445 insertions(+), 2373 deletions(-)
rename tests/{incremental-json-api => example-json-api}/.eslintrc.cjs (100%)
rename tests/{incremental-json-api => example-json-api}/README.md (100%)
rename tests/{incremental-json-api => example-json-api}/app/adapters/application.js (100%)
rename tests/{incremental-json-api => example-json-api}/app/app.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/.gitkeep (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/book-list.hbs (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/book-list.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/book-search.hbs (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/book-search.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/infinite-books.hbs (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/infinite-books.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/legacy-infinite-books.hbs (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/legacy-infinite-books.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/components/page-link.hbs (100%)
rename tests/{incremental-json-api => example-json-api}/app/config/environment.d.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/.gitkeep (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/add.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/and.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/eq.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/gt.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/lt.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/mod.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/neq.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/not.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/or.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/helpers/sub.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/index.html (71%)
rename tests/{incremental-json-api => example-json-api}/app/models/.gitkeep (100%)
rename tests/{incremental-json-api => example-json-api}/app/models/author.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/models/book.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/models/genre.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/resolver.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/router.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/routes/.gitkeep (100%)
rename tests/{incremental-json-api => example-json-api}/app/routes/application.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/services/request-manager.ts (100%)
rename tests/{incremental-json-api => example-json-api}/app/services/store.js (100%)
rename tests/{incremental-json-api => example-json-api}/app/styles/app.css (100%)
rename tests/{incremental-json-api => example-json-api}/app/templates/.gitkeep (100%)
rename tests/{incremental-json-api => example-json-api}/app/templates/application.hbs (100%)
rename tests/{recommended-json-api => example-json-api}/app/utils/pagination-links.ts (100%)
rename tests/{recommended-json-api => example-json-api}/config/environment.js (96%)
rename tests/{incremental-json-api => example-json-api}/config/optional-features.json (100%)
rename tests/{incremental-json-api => example-json-api}/config/targets.js (100%)
rename tests/{incremental-json-api => example-json-api}/ember-cli-build.js (100%)
rename tests/{incremental-json-api => example-json-api}/package.json (98%)
rename tests/{incremental-json-api => example-json-api}/server/index.js (100%)
rename tests/{incremental-json-api => example-json-api}/server/mocks/MOCK_DATA.json (100%)
rename tests/{incremental-json-api => example-json-api}/server/mocks/book.js (100%)
rename tests/{incremental-json-api => example-json-api}/testem.js (100%)
rename tests/{incremental-json-api => example-json-api}/tests/.gitkeep (100%)
rename tests/{recommended-json-api => example-json-api}/tests/index.html (93%)
rename tests/{incremental-json-api => example-json-api}/tests/test-helper.js (100%)
rename tests/{incremental-json-api => example-json-api}/tsconfig.json (100%)
delete mode 100644 tests/incremental-json-api/app/utils/pagination-links.ts
delete mode 100644 tests/incremental-json-api/config/environment.js
delete mode 100644 tests/incremental-json-api/tests/index.html
delete mode 100644 tests/recommended-json-api/.eslintrc.cjs
delete mode 100644 tests/recommended-json-api/README.md
delete mode 100644 tests/recommended-json-api/app/app.ts
delete mode 100644 tests/recommended-json-api/app/components/.gitkeep
delete mode 100644 tests/recommended-json-api/app/components/book-list.hbs
delete mode 100644 tests/recommended-json-api/app/components/book-list.ts
delete mode 100644 tests/recommended-json-api/app/components/book-search.hbs
delete mode 100644 tests/recommended-json-api/app/components/book-search.ts
delete mode 100644 tests/recommended-json-api/app/components/infinite-books.hbs
delete mode 100644 tests/recommended-json-api/app/components/infinite-books.ts
delete mode 100644 tests/recommended-json-api/app/components/page-link.hbs
delete mode 100644 tests/recommended-json-api/app/config/environment.d.ts
delete mode 100644 tests/recommended-json-api/app/helpers/.gitkeep
delete mode 100644 tests/recommended-json-api/app/helpers/add.ts
delete mode 100644 tests/recommended-json-api/app/helpers/and.ts
delete mode 100644 tests/recommended-json-api/app/helpers/eq.ts
delete mode 100644 tests/recommended-json-api/app/helpers/gt.ts
delete mode 100644 tests/recommended-json-api/app/helpers/lt.ts
delete mode 100644 tests/recommended-json-api/app/helpers/mod.ts
delete mode 100644 tests/recommended-json-api/app/helpers/neq.ts
delete mode 100644 tests/recommended-json-api/app/helpers/not.ts
delete mode 100644 tests/recommended-json-api/app/helpers/or.ts
delete mode 100644 tests/recommended-json-api/app/helpers/sub.ts
delete mode 100644 tests/recommended-json-api/app/index.html
delete mode 100644 tests/recommended-json-api/app/models/.gitkeep
delete mode 100644 tests/recommended-json-api/app/models/author.ts
delete mode 100644 tests/recommended-json-api/app/models/book.ts
delete mode 100644 tests/recommended-json-api/app/models/genre.ts
delete mode 100644 tests/recommended-json-api/app/resolver.ts
delete mode 100644 tests/recommended-json-api/app/router.ts
delete mode 100644 tests/recommended-json-api/app/routes/.gitkeep
delete mode 100644 tests/recommended-json-api/app/routes/application.ts
delete mode 100644 tests/recommended-json-api/app/services/store.ts
delete mode 100644 tests/recommended-json-api/app/styles/app.css
delete mode 100644 tests/recommended-json-api/app/templates/.gitkeep
delete mode 100644 tests/recommended-json-api/app/templates/application.hbs
delete mode 100644 tests/recommended-json-api/config/optional-features.json
delete mode 100644 tests/recommended-json-api/config/targets.js
delete mode 100644 tests/recommended-json-api/ember-cli-build.js
delete mode 100644 tests/recommended-json-api/server/index.js
delete mode 100644 tests/recommended-json-api/server/mocks/MOCK_DATA.json
delete mode 100644 tests/recommended-json-api/server/mocks/book.js
delete mode 100644 tests/recommended-json-api/testem.js
delete mode 100644 tests/recommended-json-api/tests/.gitkeep
delete mode 100644 tests/recommended-json-api/tests/test-helper.js
delete mode 100644 tests/recommended-json-api/tsconfig.json
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f3ff7342afd..d39e3258ad4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2369,7 +2369,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/string':
specifier: 3.1.1
version: 3.1.1(@babel/core@7.24.3)
@@ -3429,7 +3429,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/optional-features':
specifier: ^2.1.0
version: 2.1.0
@@ -3561,7 +3561,7 @@ importers:
version: 7.24.1
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/optional-features':
specifier: ^2.1.0
version: 2.1.0
@@ -3647,193 +3647,7 @@ importers:
ember-inflector:
injected: true
- tests/fastboot:
- dependencies:
- '@ember-data/unpublished-test-infra':
- specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
- '@ember/string':
- specifier: 3.1.1
- version: 3.1.1(@babel/core@7.24.3)
- ember-auto-import:
- specifier: ^2.7.0
- version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
- ember-data:
- specifier: workspace:5.4.0-alpha.43
- version: file:packages/-ember-data(@babel/core@7.24.3)(@ember/string@3.1.1)
- ember-inflector:
- specifier: ^4.0.2
- version: 4.0.2(@babel/core@7.24.3)
- pnpm-sync-dependencies-meta-injected:
- specifier: 0.0.10
- version: 0.0.10
- webpack:
- specifier: ^5.91.0
- version: 5.91.0
- devDependencies:
- '@babel/core':
- specifier: ^7.24.1
- version: 7.24.3(supports-color@8.1.1)
- '@babel/runtime':
- specifier: ^7.24.1
- version: 7.24.1
- '@ember/optional-features':
- specifier: ^2.1.0
- version: 2.1.0
- '@ember/test-helpers':
- specifier: ^3.3.0
- version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0)
- '@glimmer/component':
- specifier: ^1.1.2
- version: 1.1.2(@babel/core@7.24.3)
- '@glimmer/tracking':
- specifier: ^1.1.2
- version: 1.1.2
- '@warp-drive/internal-config':
- specifier: workspace:5.4.0-alpha.43
- version: link:../../config
- ember-cli:
- specifier: ~5.7.0
- version: 5.7.0
- ember-cli-babel:
- specifier: ^8.2.0
- version: 8.2.0(@babel/core@7.24.3)
- ember-cli-dependency-checker:
- specifier: ^3.3.2
- version: 3.3.2(ember-cli@5.7.0)
- ember-cli-fastboot:
- specifier: ^4.1.2
- version: 4.1.2(@babel/core@7.24.3)(ember-cli@5.7.0)(ember-source@5.7.0)
- ember-cli-fastboot-testing:
- specifier: ^0.6.1
- version: 0.6.1(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0)(webpack@5.91.0)
- ember-cli-htmlbars:
- specifier: ^6.3.0
- version: 6.3.0
- ember-cli-inject-live-reload:
- specifier: ^2.1.0
- version: 2.1.0
- ember-cli-version-checker:
- specifier: ^5.1.2
- version: 5.1.2
- ember-load-initializers:
- specifier: ^2.1.2
- version: 2.1.2(@babel/core@7.24.3)
- ember-maybe-import-regenerator:
- specifier: ^1.0.0
- version: 1.0.0(@babel/core@7.24.3)
- ember-qunit:
- specifier: ^8.0.2
- version: 8.0.2(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4)
- ember-resolver:
- specifier: ^11.0.1
- version: 11.0.1(@babel/core@7.24.3)(ember-source@5.7.0)
- ember-simple-tree:
- specifier: ^0.8.4
- version: 0.8.4(@babel/core@7.24.3)
- ember-source:
- specifier: ~5.7.0
- version: 5.7.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0)
- loader.js:
- specifier: ^4.7.0
- version: 4.7.0
- qunit:
- specifier: 2.19.4
- version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
- qunit-dom:
- specifier: ^3.0.0
- version: 3.0.0
- typescript:
- specifier: ^5.4.3
- version: 5.4.3
- dependenciesMeta:
- '@ember-data/unpublished-test-infra':
- injected: true
- '@ember/string':
- injected: true
- ember-data:
- injected: true
- ember-inflector:
- injected: true
-
- tests/full-data-asset-size-app:
- dependencies:
- pnpm-sync-dependencies-meta-injected:
- specifier: 0.0.10
- version: 0.0.10
- devDependencies:
- '@babel/core':
- specifier: ^7.24.1
- version: 7.24.3(supports-color@8.1.1)
- '@babel/runtime':
- specifier: ^7.24.1
- version: 7.24.1
- '@ember-data/private-build-infra':
- specifier: workspace:5.4.0-alpha.43
- version: file:packages/private-build-infra(@glint/template@1.4.0)
- '@ember/optional-features':
- specifier: ^2.1.0
- version: 2.1.0
- '@ember/string':
- specifier: 3.1.1
- version: 3.1.1(@babel/core@7.24.3)
- '@glimmer/component':
- specifier: ^1.1.2
- version: 1.1.2(@babel/core@7.24.3)
- '@glimmer/tracking':
- specifier: ^1.1.2
- version: 1.1.2
- ember-auto-import:
- specifier: ^2.7.0
- version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
- ember-cli:
- specifier: ~5.7.0
- version: 5.7.0
- ember-cli-babel:
- specifier: ^8.2.0
- version: 8.2.0(@babel/core@7.24.3)
- ember-cli-dependency-checker:
- specifier: ^3.3.2
- version: 3.3.2(ember-cli@5.7.0)
- ember-cli-htmlbars:
- specifier: ^6.3.0
- version: 6.3.0
- ember-cli-terser:
- specifier: ^4.0.2
- version: 4.0.2
- ember-data:
- specifier: workspace:5.4.0-alpha.43
- version: file:packages/-ember-data(@babel/core@7.24.3)(@ember/string@3.1.1)
- ember-load-initializers:
- specifier: ^2.1.2
- version: 2.1.2(@babel/core@7.24.3)
- ember-maybe-import-regenerator:
- specifier: ^1.0.0
- version: 1.0.0(@babel/core@7.24.3)
- ember-resolver:
- specifier: ^11.0.1
- version: 11.0.1(@babel/core@7.24.3)(ember-source@5.7.0)
- ember-source:
- specifier: ~5.7.0
- version: 5.7.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0)
- loader.js:
- specifier: ^4.7.0
- version: 4.7.0
- webpack:
- specifier: ^5.91.0
- version: 5.91.0
- zlib:
- specifier: 1.0.5
- version: 1.0.5
- dependenciesMeta:
- '@ember-data/private-build-infra':
- injected: true
- '@ember/string':
- injected: true
- ember-data:
- injected: true
-
- tests/incremental-json-api:
+ tests/example-json-api:
dependencies:
pnpm-sync-dependencies-meta-injected:
specifier: 0.0.10
@@ -3877,7 +3691,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0)(qunit@2.19.4)
'@ember/edition-utils':
specifier: ^1.2.0
version: 1.2.0
@@ -4005,39 +3819,225 @@ importers:
specifier: ^5.3.3
version: 5.4.3
webpack:
- specifier: ^5.89.0
+ specifier: ^5.89.0
+ version: 5.91.0
+ dependenciesMeta:
+ '@ember-data/debug':
+ injected: true
+ '@ember-data/graph':
+ injected: true
+ '@ember-data/json-api':
+ injected: true
+ '@ember-data/legacy-compat':
+ injected: true
+ '@ember-data/model':
+ injected: true
+ '@ember-data/private-build-infra':
+ injected: true
+ '@ember-data/request':
+ injected: true
+ '@ember-data/request-utils':
+ injected: true
+ '@ember-data/store':
+ injected: true
+ '@ember-data/tracking':
+ injected: true
+ '@ember-data/unpublished-test-infra':
+ injected: true
+ '@ember/string':
+ injected: true
+ '@warp-drive/core-types':
+ injected: true
+ ember-data:
+ injected: true
+ ember-inflector:
+ injected: true
+
+ tests/fastboot:
+ dependencies:
+ '@ember-data/unpublished-test-infra':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
+ '@ember/string':
+ specifier: 3.1.1
+ version: 3.1.1(@babel/core@7.24.3)
+ ember-auto-import:
+ specifier: ^2.7.0
+ version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-data:
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/-ember-data(@babel/core@7.24.3)(@ember/string@3.1.1)
+ ember-inflector:
+ specifier: ^4.0.2
+ version: 4.0.2(@babel/core@7.24.3)
+ pnpm-sync-dependencies-meta-injected:
+ specifier: 0.0.10
+ version: 0.0.10
+ webpack:
+ specifier: ^5.91.0
+ version: 5.91.0
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.24.1
+ version: 7.24.3(supports-color@8.1.1)
+ '@babel/runtime':
+ specifier: ^7.24.1
+ version: 7.24.1
+ '@ember/optional-features':
+ specifier: ^2.1.0
+ version: 2.1.0
+ '@ember/test-helpers':
+ specifier: ^3.3.0
+ version: 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0)
+ '@glimmer/component':
+ specifier: ^1.1.2
+ version: 1.1.2(@babel/core@7.24.3)
+ '@glimmer/tracking':
+ specifier: ^1.1.2
+ version: 1.1.2
+ '@warp-drive/internal-config':
+ specifier: workspace:5.4.0-alpha.43
+ version: link:../../config
+ ember-cli:
+ specifier: ~5.7.0
+ version: 5.7.0
+ ember-cli-babel:
+ specifier: ^8.2.0
+ version: 8.2.0(@babel/core@7.24.3)
+ ember-cli-dependency-checker:
+ specifier: ^3.3.2
+ version: 3.3.2(ember-cli@5.7.0)
+ ember-cli-fastboot:
+ specifier: ^4.1.2
+ version: 4.1.2(@babel/core@7.24.3)(ember-cli@5.7.0)(ember-source@5.7.0)
+ ember-cli-fastboot-testing:
+ specifier: ^0.6.1
+ version: 0.6.1(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-cli-fastboot@4.1.2)(ember-cli@5.7.0)(ember-source@5.7.0)(webpack@5.91.0)
+ ember-cli-htmlbars:
+ specifier: ^6.3.0
+ version: 6.3.0
+ ember-cli-inject-live-reload:
+ specifier: ^2.1.0
+ version: 2.1.0
+ ember-cli-version-checker:
+ specifier: ^5.1.2
+ version: 5.1.2
+ ember-load-initializers:
+ specifier: ^2.1.2
+ version: 2.1.2(@babel/core@7.24.3)
+ ember-maybe-import-regenerator:
+ specifier: ^1.0.0
+ version: 1.0.0(@babel/core@7.24.3)
+ ember-qunit:
+ specifier: ^8.0.2
+ version: 8.0.2(@babel/core@7.24.3)(@ember/test-helpers@3.3.0)(ember-source@5.7.0)(qunit@2.19.4)
+ ember-resolver:
+ specifier: ^11.0.1
+ version: 11.0.1(@babel/core@7.24.3)(ember-source@5.7.0)
+ ember-simple-tree:
+ specifier: ^0.8.4
+ version: 0.8.4(@babel/core@7.24.3)
+ ember-source:
+ specifier: ~5.7.0
+ version: 5.7.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0)
+ loader.js:
+ specifier: ^4.7.0
+ version: 4.7.0
+ qunit:
+ specifier: 2.19.4
+ version: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ qunit-dom:
+ specifier: ^3.0.0
+ version: 3.0.0
+ typescript:
+ specifier: ^5.4.3
+ version: 5.4.3
+ dependenciesMeta:
+ '@ember-data/unpublished-test-infra':
+ injected: true
+ '@ember/string':
+ injected: true
+ ember-data:
+ injected: true
+ ember-inflector:
+ injected: true
+
+ tests/full-data-asset-size-app:
+ dependencies:
+ pnpm-sync-dependencies-meta-injected:
+ specifier: 0.0.10
+ version: 0.0.10
+ devDependencies:
+ '@babel/core':
+ specifier: ^7.24.1
+ version: 7.24.3(supports-color@8.1.1)
+ '@babel/runtime':
+ specifier: ^7.24.1
+ version: 7.24.1
+ '@ember-data/private-build-infra':
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/private-build-infra(@glint/template@1.4.0)
+ '@ember/optional-features':
+ specifier: ^2.1.0
+ version: 2.1.0
+ '@ember/string':
+ specifier: 3.1.1
+ version: 3.1.1(@babel/core@7.24.3)
+ '@glimmer/component':
+ specifier: ^1.1.2
+ version: 1.1.2(@babel/core@7.24.3)
+ '@glimmer/tracking':
+ specifier: ^1.1.2
+ version: 1.1.2
+ ember-auto-import:
+ specifier: ^2.7.0
+ version: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli:
+ specifier: ~5.7.0
+ version: 5.7.0
+ ember-cli-babel:
+ specifier: ^8.2.0
+ version: 8.2.0(@babel/core@7.24.3)
+ ember-cli-dependency-checker:
+ specifier: ^3.3.2
+ version: 3.3.2(ember-cli@5.7.0)
+ ember-cli-htmlbars:
+ specifier: ^6.3.0
+ version: 6.3.0
+ ember-cli-terser:
+ specifier: ^4.0.2
+ version: 4.0.2
+ ember-data:
+ specifier: workspace:5.4.0-alpha.43
+ version: file:packages/-ember-data(@babel/core@7.24.3)(@ember/string@3.1.1)
+ ember-load-initializers:
+ specifier: ^2.1.2
+ version: 2.1.2(@babel/core@7.24.3)
+ ember-maybe-import-regenerator:
+ specifier: ^1.0.0
+ version: 1.0.0(@babel/core@7.24.3)
+ ember-resolver:
+ specifier: ^11.0.1
+ version: 11.0.1(@babel/core@7.24.3)(ember-source@5.7.0)
+ ember-source:
+ specifier: ~5.7.0
+ version: 5.7.0(@babel/core@7.24.3)(@glimmer/component@1.1.2)(@glint/template@1.4.0)(webpack@5.91.0)
+ loader.js:
+ specifier: ^4.7.0
+ version: 4.7.0
+ webpack:
+ specifier: ^5.91.0
version: 5.91.0
+ zlib:
+ specifier: 1.0.5
+ version: 1.0.5
dependenciesMeta:
- '@ember-data/debug':
- injected: true
- '@ember-data/graph':
- injected: true
- '@ember-data/json-api':
- injected: true
- '@ember-data/legacy-compat':
- injected: true
- '@ember-data/model':
- injected: true
'@ember-data/private-build-infra':
injected: true
- '@ember-data/request':
- injected: true
- '@ember-data/request-utils':
- injected: true
- '@ember-data/store':
- injected: true
- '@ember-data/tracking':
- injected: true
- '@ember-data/unpublished-test-infra':
- injected: true
'@ember/string':
injected: true
- '@warp-drive/core-types':
- injected: true
ember-data:
injected: true
- ember-inflector:
- injected: true
tests/main:
dependencies:
@@ -4092,7 +4092,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/edition-utils':
specifier: ^1.2.0
version: 1.2.0
@@ -4400,7 +4400,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/edition-utils':
specifier: ^1.2.0
version: 1.2.0
@@ -4792,7 +4792,7 @@ importers:
version: file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
'@ember-data/unpublished-test-infra':
specifier: workspace:5.4.0-alpha.43
- version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)
+ version: file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4)
'@ember/edition-utils':
specifier: ^1.2.0
version: 1.2.0
@@ -20402,6 +20402,11 @@ packages:
id: file:packages/unpublished-test-infra
name: '@ember-data/unpublished-test-infra'
engines: {node: '>= 18.19.1'}
+ peerDependencies:
+ qunit: 2.19.4
+ peerDependenciesMeta:
+ qunit:
+ optional: true
dependencies:
'@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
'@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
@@ -20498,6 +20503,11 @@ packages:
id: file:packages/unpublished-test-infra
name: '@ember-data/unpublished-test-infra'
engines: {node: '>= 18.19.1'}
+ peerDependencies:
+ qunit: 2.19.4
+ peerDependenciesMeta:
+ qunit:
+ optional: true
dependencies:
'@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
'@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
@@ -20590,11 +20600,16 @@ packages:
- whiskers
dev: true
- file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0):
+ file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.4.1)(ember-source@5.6.0)(qunit@2.19.4):
resolution: {directory: packages/unpublished-test-infra, type: directory}
id: file:packages/unpublished-test-infra
name: '@ember-data/unpublished-test-infra'
engines: {node: '>= 18.19.1'}
+ peerDependencies:
+ qunit: 2.19.4
+ peerDependenciesMeta:
+ qunit:
+ optional: true
dependencies:
'@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
'@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
@@ -20686,3 +20701,206 @@ packages:
- webpack-cli
- whiskers
dev: true
+
+ file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli-test-loader@3.1.0)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4):
+ resolution: {directory: packages/unpublished-test-infra, type: directory}
+ id: file:packages/unpublished-test-infra
+ name: '@ember-data/unpublished-test-infra'
+ engines: {node: '>= 18.19.1'}
+ peerDependencies:
+ qunit: 2.19.4
+ peerDependenciesMeta:
+ qunit:
+ optional: true
+ dependencies:
+ '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
+ '@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/store': file:packages/store(@babel/core@7.24.3)(@ember-data/request@5.4.0-alpha.43)(@ember-data/tracking@5.4.0-alpha.43)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@ember/edition-utils': 1.2.0
+ '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0)
+ '@embroider/macros': 1.15.0(@glint/template@1.4.0)
+ '@types/qunit': 2.19.10
+ '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)
+ broccoli-merge-trees: 4.2.0
+ chalk: 4.1.2
+ ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.7.0)
+ ember-get-config: 2.1.1(@babel/core@7.24.3)(@glint/template@1.4.0)
+ qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ semver: 7.6.0
+ testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq)
+ typescript: 5.4.3
+ webpack: 5.91.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@ember/string'
+ - '@embroider/addon-shim'
+ - '@glint/template'
+ - '@swc/core'
+ - arc-templates
+ - atpl
+ - babel-core
+ - bracket-template
+ - bufferutil
+ - coffee-script
+ - debug
+ - dot
+ - dust
+ - dustjs-helpers
+ - dustjs-linkedin
+ - eco
+ - ect
+ - ejs
+ - ember-cli
+ - ember-cli-test-loader
+ - ember-source
+ - esbuild
+ - haml-coffee
+ - hamlet
+ - hamljs
+ - handlebars
+ - hogan.js
+ - htmling
+ - jade
+ - jazz
+ - jqtpl
+ - just
+ - liquid-node
+ - liquor
+ - lodash
+ - marko
+ - mote
+ - nunjucks
+ - plates
+ - pug
+ - qejs
+ - ractive
+ - razor-tmpl
+ - react
+ - react-dom
+ - slm
+ - squirrelly
+ - supports-color
+ - swig
+ - swig-templates
+ - teacup
+ - templayed
+ - then-jade
+ - then-pug
+ - tinyliquid
+ - toffee
+ - twig
+ - twing
+ - uglify-js
+ - underscore
+ - utf-8-validate
+ - vash
+ - velocityjs
+ - walrus
+ - webpack-cli
+ - whiskers
+ dev: true
+
+ file:packages/unpublished-test-infra(@babel/core@7.24.3)(@ember/string@3.1.1)(ember-cli@5.7.0)(ember-source@5.7.0)(qunit@2.19.4):
+ resolution: {directory: packages/unpublished-test-infra, type: directory}
+ id: file:packages/unpublished-test-infra
+ name: '@ember-data/unpublished-test-infra'
+ engines: {node: '>= 18.19.1'}
+ peerDependencies:
+ qunit: 2.19.4
+ peerDependenciesMeta:
+ qunit:
+ optional: true
+ dependencies:
+ '@ember-data/private-build-infra': file:packages/private-build-infra(@glint/template@1.4.0)
+ '@ember-data/request': file:packages/request(@babel/core@7.24.3)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/store': file:packages/store(@babel/core@7.24.3)(@ember-data/request@5.4.0-alpha.43)(@ember-data/tracking@5.4.0-alpha.43)(@ember/string@3.1.1)(@glint/template@1.4.0)(@warp-drive/core-types@0.0.0-alpha.29)
+ '@ember-data/tracking': file:packages/tracking(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@ember/edition-utils': 1.2.0
+ '@ember/test-helpers': 3.3.0(patch_hash=gppmtiox6pymwamrfimkbxfrsm)(@babel/core@7.24.3)(@glint/template@1.4.0)(ember-source@5.7.0)(webpack@5.91.0)
+ '@embroider/macros': 1.15.0(@glint/template@1.4.0)
+ '@types/qunit': 2.19.10
+ '@warp-drive/core-types': file:packages/core-types(@babel/core@7.24.3)(@glint/template@1.4.0)
+ '@warp-drive/diagnostic': file:packages/diagnostic(@ember/test-helpers@3.3.0)(@embroider/addon-shim@1.8.7)(ember-cli-test-loader@3.1.0)
+ broccoli-merge-trees: 4.2.0
+ chalk: 4.1.2
+ ember-auto-import: 2.7.2(@glint/template@1.4.0)(webpack@5.91.0)
+ ember-cli-babel: 8.2.0(@babel/core@7.24.3)
+ ember-cli-blueprint-test-helpers: 0.19.2(ember-cli@5.7.0)
+ ember-get-config: 2.1.1(@babel/core@7.24.3)(@glint/template@1.4.0)
+ qunit: 2.19.4(patch_hash=h2fz5inojlzu6daraxt5bghsqy)
+ semver: 7.6.0
+ testem: 3.11.0(patch_hash=yfkum5c5nfihh3ce3f64tnp5rq)
+ typescript: 5.4.3
+ webpack: 5.91.0
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@ember/string'
+ - '@embroider/addon-shim'
+ - '@glint/template'
+ - '@swc/core'
+ - arc-templates
+ - atpl
+ - babel-core
+ - bracket-template
+ - bufferutil
+ - coffee-script
+ - debug
+ - dot
+ - dust
+ - dustjs-helpers
+ - dustjs-linkedin
+ - eco
+ - ect
+ - ejs
+ - ember-cli
+ - ember-cli-test-loader
+ - ember-source
+ - esbuild
+ - haml-coffee
+ - hamlet
+ - hamljs
+ - handlebars
+ - hogan.js
+ - htmling
+ - jade
+ - jazz
+ - jqtpl
+ - just
+ - liquid-node
+ - liquor
+ - lodash
+ - marko
+ - mote
+ - nunjucks
+ - plates
+ - pug
+ - qejs
+ - ractive
+ - razor-tmpl
+ - react
+ - react-dom
+ - slm
+ - squirrelly
+ - supports-color
+ - swig
+ - swig-templates
+ - teacup
+ - templayed
+ - then-jade
+ - then-pug
+ - tinyliquid
+ - toffee
+ - twig
+ - twing
+ - uglify-js
+ - underscore
+ - utf-8-validate
+ - vash
+ - velocityjs
+ - walrus
+ - webpack-cli
+ - whiskers
diff --git a/tests/incremental-json-api/.eslintrc.cjs b/tests/example-json-api/.eslintrc.cjs
similarity index 100%
rename from tests/incremental-json-api/.eslintrc.cjs
rename to tests/example-json-api/.eslintrc.cjs
diff --git a/tests/incremental-json-api/README.md b/tests/example-json-api/README.md
similarity index 100%
rename from tests/incremental-json-api/README.md
rename to tests/example-json-api/README.md
diff --git a/tests/incremental-json-api/app/adapters/application.js b/tests/example-json-api/app/adapters/application.js
similarity index 100%
rename from tests/incremental-json-api/app/adapters/application.js
rename to tests/example-json-api/app/adapters/application.js
diff --git a/tests/incremental-json-api/app/app.ts b/tests/example-json-api/app/app.ts
similarity index 100%
rename from tests/incremental-json-api/app/app.ts
rename to tests/example-json-api/app/app.ts
diff --git a/tests/incremental-json-api/app/components/.gitkeep b/tests/example-json-api/app/components/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/app/components/.gitkeep
rename to tests/example-json-api/app/components/.gitkeep
diff --git a/tests/incremental-json-api/app/components/book-list.hbs b/tests/example-json-api/app/components/book-list.hbs
similarity index 100%
rename from tests/incremental-json-api/app/components/book-list.hbs
rename to tests/example-json-api/app/components/book-list.hbs
diff --git a/tests/incremental-json-api/app/components/book-list.ts b/tests/example-json-api/app/components/book-list.ts
similarity index 100%
rename from tests/incremental-json-api/app/components/book-list.ts
rename to tests/example-json-api/app/components/book-list.ts
diff --git a/tests/incremental-json-api/app/components/book-search.hbs b/tests/example-json-api/app/components/book-search.hbs
similarity index 100%
rename from tests/incremental-json-api/app/components/book-search.hbs
rename to tests/example-json-api/app/components/book-search.hbs
diff --git a/tests/incremental-json-api/app/components/book-search.ts b/tests/example-json-api/app/components/book-search.ts
similarity index 100%
rename from tests/incremental-json-api/app/components/book-search.ts
rename to tests/example-json-api/app/components/book-search.ts
diff --git a/tests/incremental-json-api/app/components/infinite-books.hbs b/tests/example-json-api/app/components/infinite-books.hbs
similarity index 100%
rename from tests/incremental-json-api/app/components/infinite-books.hbs
rename to tests/example-json-api/app/components/infinite-books.hbs
diff --git a/tests/incremental-json-api/app/components/infinite-books.ts b/tests/example-json-api/app/components/infinite-books.ts
similarity index 100%
rename from tests/incremental-json-api/app/components/infinite-books.ts
rename to tests/example-json-api/app/components/infinite-books.ts
diff --git a/tests/incremental-json-api/app/components/legacy-infinite-books.hbs b/tests/example-json-api/app/components/legacy-infinite-books.hbs
similarity index 100%
rename from tests/incremental-json-api/app/components/legacy-infinite-books.hbs
rename to tests/example-json-api/app/components/legacy-infinite-books.hbs
diff --git a/tests/incremental-json-api/app/components/legacy-infinite-books.ts b/tests/example-json-api/app/components/legacy-infinite-books.ts
similarity index 100%
rename from tests/incremental-json-api/app/components/legacy-infinite-books.ts
rename to tests/example-json-api/app/components/legacy-infinite-books.ts
diff --git a/tests/incremental-json-api/app/components/page-link.hbs b/tests/example-json-api/app/components/page-link.hbs
similarity index 100%
rename from tests/incremental-json-api/app/components/page-link.hbs
rename to tests/example-json-api/app/components/page-link.hbs
diff --git a/tests/incremental-json-api/app/config/environment.d.ts b/tests/example-json-api/app/config/environment.d.ts
similarity index 100%
rename from tests/incremental-json-api/app/config/environment.d.ts
rename to tests/example-json-api/app/config/environment.d.ts
diff --git a/tests/incremental-json-api/app/helpers/.gitkeep b/tests/example-json-api/app/helpers/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/app/helpers/.gitkeep
rename to tests/example-json-api/app/helpers/.gitkeep
diff --git a/tests/incremental-json-api/app/helpers/add.ts b/tests/example-json-api/app/helpers/add.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/add.ts
rename to tests/example-json-api/app/helpers/add.ts
diff --git a/tests/incremental-json-api/app/helpers/and.ts b/tests/example-json-api/app/helpers/and.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/and.ts
rename to tests/example-json-api/app/helpers/and.ts
diff --git a/tests/incremental-json-api/app/helpers/eq.ts b/tests/example-json-api/app/helpers/eq.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/eq.ts
rename to tests/example-json-api/app/helpers/eq.ts
diff --git a/tests/incremental-json-api/app/helpers/gt.ts b/tests/example-json-api/app/helpers/gt.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/gt.ts
rename to tests/example-json-api/app/helpers/gt.ts
diff --git a/tests/incremental-json-api/app/helpers/lt.ts b/tests/example-json-api/app/helpers/lt.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/lt.ts
rename to tests/example-json-api/app/helpers/lt.ts
diff --git a/tests/incremental-json-api/app/helpers/mod.ts b/tests/example-json-api/app/helpers/mod.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/mod.ts
rename to tests/example-json-api/app/helpers/mod.ts
diff --git a/tests/incremental-json-api/app/helpers/neq.ts b/tests/example-json-api/app/helpers/neq.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/neq.ts
rename to tests/example-json-api/app/helpers/neq.ts
diff --git a/tests/incremental-json-api/app/helpers/not.ts b/tests/example-json-api/app/helpers/not.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/not.ts
rename to tests/example-json-api/app/helpers/not.ts
diff --git a/tests/incremental-json-api/app/helpers/or.ts b/tests/example-json-api/app/helpers/or.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/or.ts
rename to tests/example-json-api/app/helpers/or.ts
diff --git a/tests/incremental-json-api/app/helpers/sub.ts b/tests/example-json-api/app/helpers/sub.ts
similarity index 100%
rename from tests/incremental-json-api/app/helpers/sub.ts
rename to tests/example-json-api/app/helpers/sub.ts
diff --git a/tests/incremental-json-api/app/index.html b/tests/example-json-api/app/index.html
similarity index 71%
rename from tests/incremental-json-api/app/index.html
rename to tests/example-json-api/app/index.html
index 19bd3b1cc86..d3239b493cc 100644
--- a/tests/incremental-json-api/app/index.html
+++ b/tests/example-json-api/app/index.html
@@ -3,14 +3,14 @@
- EmberData JSON:API Incremental Setup
+ EmberData JSON:API example Setup
{{content-for "head"}}
-
+
{{content-for "head-footer"}}
@@ -18,7 +18,7 @@
{{content-for "body"}}
-
+
{{content-for "body-footer"}}
- {{content-for "body"}}
- {{content-for "test-body"}}
-
-
-
-
-
-
-
-
-
-
-
- {{content-for "body-footer"}}
- {{content-for "test-body-footer"}}
-
-
diff --git a/tests/incremental-json-api/app/models/.gitkeep b/tests/example-json-api/app/models/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/app/models/.gitkeep
rename to tests/example-json-api/app/models/.gitkeep
diff --git a/tests/incremental-json-api/app/models/author.ts b/tests/example-json-api/app/models/author.ts
similarity index 100%
rename from tests/incremental-json-api/app/models/author.ts
rename to tests/example-json-api/app/models/author.ts
diff --git a/tests/incremental-json-api/app/models/book.ts b/tests/example-json-api/app/models/book.ts
similarity index 100%
rename from tests/incremental-json-api/app/models/book.ts
rename to tests/example-json-api/app/models/book.ts
diff --git a/tests/incremental-json-api/app/models/genre.ts b/tests/example-json-api/app/models/genre.ts
similarity index 100%
rename from tests/incremental-json-api/app/models/genre.ts
rename to tests/example-json-api/app/models/genre.ts
diff --git a/tests/incremental-json-api/app/resolver.ts b/tests/example-json-api/app/resolver.ts
similarity index 100%
rename from tests/incremental-json-api/app/resolver.ts
rename to tests/example-json-api/app/resolver.ts
diff --git a/tests/incremental-json-api/app/router.ts b/tests/example-json-api/app/router.ts
similarity index 100%
rename from tests/incremental-json-api/app/router.ts
rename to tests/example-json-api/app/router.ts
diff --git a/tests/incremental-json-api/app/routes/.gitkeep b/tests/example-json-api/app/routes/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/app/routes/.gitkeep
rename to tests/example-json-api/app/routes/.gitkeep
diff --git a/tests/incremental-json-api/app/routes/application.ts b/tests/example-json-api/app/routes/application.ts
similarity index 100%
rename from tests/incremental-json-api/app/routes/application.ts
rename to tests/example-json-api/app/routes/application.ts
diff --git a/tests/incremental-json-api/app/services/request-manager.ts b/tests/example-json-api/app/services/request-manager.ts
similarity index 100%
rename from tests/incremental-json-api/app/services/request-manager.ts
rename to tests/example-json-api/app/services/request-manager.ts
diff --git a/tests/incremental-json-api/app/services/store.js b/tests/example-json-api/app/services/store.js
similarity index 100%
rename from tests/incremental-json-api/app/services/store.js
rename to tests/example-json-api/app/services/store.js
diff --git a/tests/incremental-json-api/app/styles/app.css b/tests/example-json-api/app/styles/app.css
similarity index 100%
rename from tests/incremental-json-api/app/styles/app.css
rename to tests/example-json-api/app/styles/app.css
diff --git a/tests/incremental-json-api/app/templates/.gitkeep b/tests/example-json-api/app/templates/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/app/templates/.gitkeep
rename to tests/example-json-api/app/templates/.gitkeep
diff --git a/tests/incremental-json-api/app/templates/application.hbs b/tests/example-json-api/app/templates/application.hbs
similarity index 100%
rename from tests/incremental-json-api/app/templates/application.hbs
rename to tests/example-json-api/app/templates/application.hbs
diff --git a/tests/recommended-json-api/app/utils/pagination-links.ts b/tests/example-json-api/app/utils/pagination-links.ts
similarity index 100%
rename from tests/recommended-json-api/app/utils/pagination-links.ts
rename to tests/example-json-api/app/utils/pagination-links.ts
diff --git a/tests/recommended-json-api/config/environment.js b/tests/example-json-api/config/environment.js
similarity index 96%
rename from tests/recommended-json-api/config/environment.js
rename to tests/example-json-api/config/environment.js
index 3042a06465e..57ade2f8a8d 100644
--- a/tests/recommended-json-api/config/environment.js
+++ b/tests/example-json-api/config/environment.js
@@ -2,7 +2,7 @@
module.exports = function (environment) {
const ENV = {
- modulePrefix: 'recommended-json-api',
+ modulePrefix: 'example-json-api',
environment,
rootURL: '/',
locationType: 'history',
diff --git a/tests/incremental-json-api/config/optional-features.json b/tests/example-json-api/config/optional-features.json
similarity index 100%
rename from tests/incremental-json-api/config/optional-features.json
rename to tests/example-json-api/config/optional-features.json
diff --git a/tests/incremental-json-api/config/targets.js b/tests/example-json-api/config/targets.js
similarity index 100%
rename from tests/incremental-json-api/config/targets.js
rename to tests/example-json-api/config/targets.js
diff --git a/tests/incremental-json-api/ember-cli-build.js b/tests/example-json-api/ember-cli-build.js
similarity index 100%
rename from tests/incremental-json-api/ember-cli-build.js
rename to tests/example-json-api/ember-cli-build.js
diff --git a/tests/incremental-json-api/package.json b/tests/example-json-api/package.json
similarity index 98%
rename from tests/incremental-json-api/package.json
rename to tests/example-json-api/package.json
index 77a5dab9baf..4b3eba6f075 100644
--- a/tests/incremental-json-api/package.json
+++ b/tests/example-json-api/package.json
@@ -7,7 +7,7 @@
"repository": {
"type": "git",
"url": "git+ssh://git@github.com:emberjs/data.git",
- "directory": "tests/incremental-json-api"
+ "directory": "tests/example-json-api"
},
"license": "MIT",
"author": "",
diff --git a/tests/incremental-json-api/server/index.js b/tests/example-json-api/server/index.js
similarity index 100%
rename from tests/incremental-json-api/server/index.js
rename to tests/example-json-api/server/index.js
diff --git a/tests/incremental-json-api/server/mocks/MOCK_DATA.json b/tests/example-json-api/server/mocks/MOCK_DATA.json
similarity index 100%
rename from tests/incremental-json-api/server/mocks/MOCK_DATA.json
rename to tests/example-json-api/server/mocks/MOCK_DATA.json
diff --git a/tests/incremental-json-api/server/mocks/book.js b/tests/example-json-api/server/mocks/book.js
similarity index 100%
rename from tests/incremental-json-api/server/mocks/book.js
rename to tests/example-json-api/server/mocks/book.js
diff --git a/tests/incremental-json-api/testem.js b/tests/example-json-api/testem.js
similarity index 100%
rename from tests/incremental-json-api/testem.js
rename to tests/example-json-api/testem.js
diff --git a/tests/incremental-json-api/tests/.gitkeep b/tests/example-json-api/tests/.gitkeep
similarity index 100%
rename from tests/incremental-json-api/tests/.gitkeep
rename to tests/example-json-api/tests/.gitkeep
diff --git a/tests/recommended-json-api/tests/index.html b/tests/example-json-api/tests/index.html
similarity index 93%
rename from tests/recommended-json-api/tests/index.html
rename to tests/example-json-api/tests/index.html
index 7904f5f0da9..3ba72386180 100644
--- a/tests/recommended-json-api/tests/index.html
+++ b/tests/example-json-api/tests/index.html
@@ -11,7 +11,7 @@
{{content-for "test-head"}}
-
+
{{content-for "head-footer"}}
@@ -58,7 +58,7 @@
-
+
{{content-for "body-footer"}}
diff --git a/tests/incremental-json-api/tests/test-helper.js b/tests/example-json-api/tests/test-helper.js
similarity index 100%
rename from tests/incremental-json-api/tests/test-helper.js
rename to tests/example-json-api/tests/test-helper.js
diff --git a/tests/incremental-json-api/tsconfig.json b/tests/example-json-api/tsconfig.json
similarity index 100%
rename from tests/incremental-json-api/tsconfig.json
rename to tests/example-json-api/tsconfig.json
diff --git a/tests/incremental-json-api/app/utils/pagination-links.ts b/tests/incremental-json-api/app/utils/pagination-links.ts
deleted file mode 100644
index 419db283fb2..00000000000
--- a/tests/incremental-json-api/app/utils/pagination-links.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { assert } from '@ember/debug';
-import { tracked } from '@glimmer/tracking';
-
-type ApiMeta = {
- currentPage: number;
- pagesTotal: number;
-};
-type ApiLinks = {
- self: string;
- first: string;
- last: string;
- prev: string | null;
- next: string | null;
-};
-
-export type ApiPage = {
- meta: ApiMeta;
- links: ApiLinks;
-};
-
-export class PaginationLinks {
- declare _pages: string[];
- @tracked declare pages: string[];
-
- addPage(page: ApiPage) {
- let { _pages } = this;
- const { pagesTotal, currentPage } = page.meta;
-
- if (currentPage === 1 && (!_pages || _pages[0] !== page.links.self)) {
- _pages = this._pages = new Array(pagesTotal).fill('.') as string[];
- } else if (pagesTotal !== _pages.length) {
- const cached = _pages;
- _pages = this._pages = new Array(pagesTotal).fill('.') as string[];
- for (let i = 0; i < pagesTotal; i++) {
- _pages[i] = cached[i]!;
- }
- }
- const pages = _pages;
-
- pages[currentPage - 1] = page.links.self;
-
- pages[0] = page.links.first;
- pages[pagesTotal - 1] = page.links.last;
- if (pagesTotal > 1 && currentPage > 1) {
- assert('previous page should exist', page.links.prev);
- pages[currentPage - 2] = page.links.prev;
- }
- if (pagesTotal > 1 && currentPage < pagesTotal - 1) {
- assert('next page should exist', page.links.next);
- pages[currentPage] = page.links.next;
- }
-
- this.pages = pages;
- }
-
- get filteredPages() {
- const { pages } = this;
- const filtered: { index: number; link: string }[] = [];
-
- for (let i = 0; i < pages.length; i++) {
- if (pages[i] !== '.') {
- filtered.push({ index: i + 1, link: pages[i] });
- } else if (filtered.length > 0 && filtered[filtered.length - 1]!.link !== '...') {
- filtered.push({ index: i + 1, link: '...' });
- }
- }
- return filtered;
- }
-}
diff --git a/tests/incremental-json-api/config/environment.js b/tests/incremental-json-api/config/environment.js
deleted file mode 100644
index ee79827adab..00000000000
--- a/tests/incremental-json-api/config/environment.js
+++ /dev/null
@@ -1,49 +0,0 @@
-'use strict';
-
-module.exports = function (environment) {
- const ENV = {
- modulePrefix: 'incremental-json-api',
- environment,
- rootURL: '/',
- locationType: 'history',
- apiCacheHardExpires: 10_000, // 120_000, // 2 minutes
- apiCacheSoftExpires: 5_000, // 30_000, // 30 seconds
- EmberENV: {
- FEATURES: {
- // Here you can enable experimental features on an ember canary build
- // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true
- },
- },
-
- APP: {
- // Here you can pass flags/options to your application instance
- // when it is created
- },
- };
-
- if (environment === 'development') {
- // ENV.APP.LOG_RESOLVER = true;
- // ENV.APP.LOG_ACTIVE_GENERATION = true;
- // ENV.APP.LOG_TRANSITIONS = true;
- // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
- // ENV.APP.LOG_VIEW_LOOKUPS = true;
- }
-
- if (environment === 'test') {
- // Testem prefers this...
- ENV.locationType = 'none';
-
- // keep test console output quieter
- ENV.APP.LOG_ACTIVE_GENERATION = false;
- ENV.APP.LOG_VIEW_LOOKUPS = false;
-
- ENV.APP.rootElement = '#ember-testing';
- ENV.APP.autoboot = false;
- }
-
- if (environment === 'production') {
- // here you can enable a production-specific feature
- }
-
- return ENV;
-};
diff --git a/tests/incremental-json-api/tests/index.html b/tests/incremental-json-api/tests/index.html
deleted file mode 100644
index 261e540d68e..00000000000
--- a/tests/incremental-json-api/tests/index.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-