retold 1.0.6 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +58 -0
- package/CLAUDE.md +52 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +161 -0
- package/docs/_sidebar.md +65 -0
- package/docs/_topbar.md +6 -0
- package/docs/architecture.md +312 -0
- package/docs/cover.md +15 -0
- package/docs/css/docuserve.css +73 -0
- package/docs/fable.md +198 -0
- package/docs/getting-started.md +272 -0
- package/docs/index.html +39 -0
- package/docs/js/pict.min.js +12 -0
- package/docs/js/pict.min.js.map +1 -0
- package/docs/meadow.md +211 -0
- package/docs/modules.md +96 -0
- package/docs/orator.md +164 -0
- package/docs/pict-docuserve.min.js +58 -0
- package/docs/pict-docuserve.min.js.map +1 -0
- package/docs/pict.md +213 -0
- package/docs/retold-building-documentation.md +33 -0
- package/docs/retold-catalog.json +2826 -0
- package/docs/retold-keyword-index.json +161289 -0
- package/docs/utility.md +63 -0
- package/examples/quickstart/README.md +47 -0
- package/examples/quickstart/layer1/README.md +21 -0
- package/examples/quickstart/layer1/index.js +49 -0
- package/examples/quickstart/layer1/package-lock.json +344 -0
- package/examples/quickstart/layer1/package.json +12 -0
- package/examples/quickstart/layer2/README.md +34 -0
- package/examples/quickstart/layer2/index.js +251 -0
- package/examples/quickstart/layer2/package-lock.json +4468 -0
- package/examples/quickstart/layer2/package.json +17 -0
- package/examples/quickstart/layer2/setup-database.js +61 -0
- package/examples/quickstart/layer3/README.md +39 -0
- package/examples/quickstart/layer3/index.js +91 -0
- package/examples/quickstart/layer3/package-lock.json +1936 -0
- package/examples/quickstart/layer3/package.json +14 -0
- package/examples/quickstart/layer4/README.md +47 -0
- package/examples/quickstart/layer4/generate-build-config.js +18 -0
- package/examples/quickstart/layer4/html/index.html +17 -0
- package/examples/quickstart/layer4/package-lock.json +13206 -0
- package/examples/quickstart/layer4/package.json +38 -0
- package/examples/quickstart/layer4/server.js +28 -0
- package/examples/quickstart/layer4/source/BookStore-Application-Config.json +15 -0
- package/examples/quickstart/layer4/source/BookStore-Application.js +54 -0
- package/examples/quickstart/layer4/source/providers/Router-Config.json +18 -0
- package/examples/quickstart/layer4/source/views/View-About.js +38 -0
- package/examples/quickstart/layer4/source/views/View-Home.js +50 -0
- package/examples/quickstart/layer4/source/views/View-Layout.js +60 -0
- package/examples/quickstart/layer5/README.md +26 -0
- package/examples/quickstart/layer5/index.js +121 -0
- package/examples/quickstart/layer5/package-lock.json +345 -0
- package/examples/quickstart/layer5/package.json +13 -0
- package/modules/.claude/settings.local.json +52 -0
- package/modules/CLAUDE.md +60 -0
- package/modules/Checkout.sh +42 -0
- package/modules/Include-Retold-Module-List.sh +15 -0
- package/modules/Retold-Modules.md +24 -0
- package/modules/Status.sh +59 -0
- package/modules/Update.sh +45 -0
- package/modules/fable/Fable.md +2 -0
- package/modules/meadow/Meadow.md +1 -0
- package/modules/orator/Orator.md +1 -0
- package/modules/pict/Pict.md +1 -0
- package/package.json +30 -35
- package/source/Retold.cjs +2 -0
- package/test/Retold_tests.js +23 -41
- package/.travis.yml +0 -13
- package/source/Retold-Meadow-Macros.js +0 -269
- package/source/Retold.js +0 -48
package/docs/utility.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Utility — Build & Documentation Tools
|
|
2
|
+
|
|
3
|
+
The utility group provides supporting tools for building, documenting, testing, and supervising Retold applications.
|
|
4
|
+
|
|
5
|
+
## Modules
|
|
6
|
+
|
|
7
|
+
### [Indoctrinate](/utility/indoctrinate/)
|
|
8
|
+
|
|
9
|
+
Documentation scaffolding and generation. Scans source trees, catalogs content with automatic label-based metadata, and generates structured output in multiple formats. Powers the Retold documentation hub by generating cross-module catalogs and keyword search indexes.
|
|
10
|
+
|
|
11
|
+
**Key features:** Content cataloging with label-based filtering, multi-format output (HTML, LaTeX, text), Retold catalog generation for cross-repo documentation, lunr-based keyword index for cross-module search.
|
|
12
|
+
|
|
13
|
+
**npm:** `indoctrinate` · **Version:** 1.0.x
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
### [Manyfest](/utility/manyfest/)
|
|
18
|
+
|
|
19
|
+
JSON manifest for consistent data description and parsing across all application layers — database, API, frontend, and UI. Provides address-based access patterns for reading and writing nested object properties with validation and type coercion.
|
|
20
|
+
|
|
21
|
+
**Key features:** Address-based data access (dot notation and array indexing), type validation and coercion, manifest-driven form generation, schema description for data layers.
|
|
22
|
+
|
|
23
|
+
**npm:** `manyfest` · **Version:** 1.0.x
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
### [Quackage](/utility/quackage/)
|
|
28
|
+
|
|
29
|
+
Standardized build tool for Retold modules. Handles browser bundling (Browserify), transpilation, unit testing, file management, JSON view assembly, and documentation generation from a single CLI.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx quack build # Build browser bundle
|
|
33
|
+
npx quack test # Run Mocha tests
|
|
34
|
+
npx quack coverage # Generate coverage report
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**npm:** `quackage` · **Version:** 1.0.x
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### [Choreographic](/utility/choreographic/)
|
|
42
|
+
|
|
43
|
+
Scaffolding for single-run data processing scripts. Provides pre-packaged application services — file reading/writing, logging, and organized output folders — for tasks like data migration, report generation, and batch processing.
|
|
44
|
+
|
|
45
|
+
**npm:** `choreographic` · **Version:** 1.0.x
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### [Ultravisor](/utility/ultravisor/)
|
|
50
|
+
|
|
51
|
+
Process supervision tool for running commands on schedule with LLM integration. Supports distributed nodes, global state, and flexible task types (shell, browser, HTTP, database).
|
|
52
|
+
|
|
53
|
+
**npm:** `ultravisor` · **Version:** 1.0.x
|
|
54
|
+
|
|
55
|
+
## All Utility Modules
|
|
56
|
+
|
|
57
|
+
| Module | Description |
|
|
58
|
+
|--------|-------------|
|
|
59
|
+
| [indoctrinate](/utility/indoctrinate/) | Documentation scaffolding with content cataloging and cross-module search |
|
|
60
|
+
| [manyfest](/utility/manyfest/) | JSON manifest for data description, validation, and address-based access |
|
|
61
|
+
| [quackage](/utility/quackage/) | Build tool for browser bundles, testing, and packaging |
|
|
62
|
+
| [choreographic](/utility/choreographic/) | Scaffolding for single-run data processing scripts |
|
|
63
|
+
| [ultravisor](/utility/ultravisor/) | Process supervision with scheduled tasks and LLM integration |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Retold Quickstart Examples
|
|
2
|
+
|
|
3
|
+
Working examples for each part of the Retold stack, corresponding to the
|
|
4
|
+
[Getting Started](../../docs/getting-started.md) documentation.
|
|
5
|
+
|
|
6
|
+
Retold applications are assembled from a layered architecture (see
|
|
7
|
+
[Architecture](../../docs/architecture.md)):
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Layer 5 — Your Application (business logic, custom endpoints)
|
|
11
|
+
Layer 4 — Orator (HTTP server, middleware, static files)
|
|
12
|
+
Layer 3 — Meadow-Endpoints (auto-generated CRUD routes)
|
|
13
|
+
Layer 2 — Meadow + FoxHound + Stricture (data broker, SQL, schemas)
|
|
14
|
+
Layer 1 — Fable (DI, configuration, logging, UUID, expressions)
|
|
15
|
+
|
|
16
|
+
Pict — Browser MVC (views, templates, providers, application lifecycle)
|
|
17
|
+
Utility — Build tools, manifest management, documentation, process supervision
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Examples
|
|
21
|
+
|
|
22
|
+
| Folder | Retold Layer | Module | Description |
|
|
23
|
+
|--------|-------------|--------|-------------|
|
|
24
|
+
| [layer1](layer1/) | Layer 1 — Fable | **Fable** | Core DI, configuration, logging, service provider pattern |
|
|
25
|
+
| [layer2](layer2/) | Layer 2 — Meadow | **Meadow** | Data access with MySQL (CRUD, schemas, FoxHound queries) |
|
|
26
|
+
| [layer3](layer3/) | Layer 4 — Orator | **Orator** | REST API server with Restify |
|
|
27
|
+
| [layer4](layer4/) | Pict | **Pict** | Browser MVC with views, templates, and routing |
|
|
28
|
+
| [layer5](layer5/) | Utility | **Manyfest** | Object navigation and schema validation |
|
|
29
|
+
|
|
30
|
+
## Running
|
|
31
|
+
|
|
32
|
+
Each example is self-contained. Enter any directory and run:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install
|
|
36
|
+
npm start # or npm run demo for examples that need setup
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The Meadow example (layer2) requires a running MySQL server on localhost:3306.
|
|
40
|
+
Run `npm run setup` first to create the database and tables.
|
|
41
|
+
|
|
42
|
+
The Pict example (layer4) requires a build step before serving:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install
|
|
46
|
+
npm run demo # builds then serves on http://localhost:8086
|
|
47
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Layer 1: Fable - The Foundation
|
|
2
|
+
|
|
3
|
+
> Retold Layer 1 — Core Ecosystem: dependency injection, configuration, logging,
|
|
4
|
+
> UUID generation, expressions
|
|
5
|
+
|
|
6
|
+
Fable is the foundation of every Retold application. All other modules depend on
|
|
7
|
+
it and register as services through the Fable service provider pattern.
|
|
8
|
+
|
|
9
|
+
## Run
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install
|
|
13
|
+
npm start
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## What This Demonstrates
|
|
17
|
+
|
|
18
|
+
- Creating a Fable instance with configuration
|
|
19
|
+
- Logging at different levels
|
|
20
|
+
- UUID generation
|
|
21
|
+
- The service provider pattern (creating and using custom services)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const libFable = require('fable');
|
|
2
|
+
|
|
3
|
+
// 1. Create a Fable instance with configuration
|
|
4
|
+
let _Fable = new libFable(
|
|
5
|
+
{
|
|
6
|
+
Product: 'BookStore',
|
|
7
|
+
ProductVersion: '1.0.0'
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
// 2. Logging
|
|
11
|
+
_Fable.log.info('BookStore starting up...');
|
|
12
|
+
_Fable.log.info(`Product: ${_Fable.settings.Product} v${_Fable.settings.ProductVersion}`);
|
|
13
|
+
|
|
14
|
+
// 3. UUID generation
|
|
15
|
+
_Fable.log.info(`Generated UUID: ${_Fable.getUUID()}`);
|
|
16
|
+
|
|
17
|
+
// 4. Service Provider pattern: create a custom service
|
|
18
|
+
class BookService extends libFable.ServiceProviderBase
|
|
19
|
+
{
|
|
20
|
+
constructor(pFable, pOptions, pServiceHash)
|
|
21
|
+
{
|
|
22
|
+
super(pFable, pOptions, pServiceHash);
|
|
23
|
+
this.serviceType = 'BookService';
|
|
24
|
+
this._Books = [];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
addBook(pTitle, pAuthor)
|
|
28
|
+
{
|
|
29
|
+
let tmpBook = { id: this.fable.getUUID(), title: pTitle, author: pAuthor };
|
|
30
|
+
this._Books.push(tmpBook);
|
|
31
|
+
this.fable.log.info(`Added book: "${pTitle}" by ${pAuthor}`);
|
|
32
|
+
return tmpBook;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
listBooks()
|
|
36
|
+
{
|
|
37
|
+
return this._Books;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// 5. Register and use the service
|
|
42
|
+
_Fable.serviceManager.addServiceType('BookService', BookService);
|
|
43
|
+
_Fable.serviceManager.instantiateServiceProvider('BookService');
|
|
44
|
+
|
|
45
|
+
_Fable.BookService.addBook('The Hobbit', 'J.R.R. Tolkien');
|
|
46
|
+
_Fable.BookService.addBook('Dune', 'Frank Herbert');
|
|
47
|
+
|
|
48
|
+
_Fable.log.info(`Total books: ${_Fable.BookService.listBooks().length}`);
|
|
49
|
+
_Fable.log.info('Layer 1 example complete.');
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "retold-quickstart-layer1-fable",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "retold-quickstart-layer1-fable",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"fable": "^3.1.51"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"node_modules/async.eachlimit": {
|
|
15
|
+
"version": "0.5.2",
|
|
16
|
+
"resolved": "https://registry.npmjs.org/async.eachlimit/-/async.eachlimit-0.5.2.tgz",
|
|
17
|
+
"integrity": "sha512-emWKSFjCbXnrCJfM2NBMyriJQrdem+LrchiMQtCavBQnJ80N2C7IBhUz8vXnjYYh+aAkY0zZSofNxVYJMTDMIw==",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"async.util.eachoflimit": "0.5.2",
|
|
21
|
+
"async.util.withoutindex": "0.5.2"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"node_modules/async.iterator": {
|
|
25
|
+
"version": "0.5.2",
|
|
26
|
+
"resolved": "https://registry.npmjs.org/async.iterator/-/async.iterator-0.5.2.tgz",
|
|
27
|
+
"integrity": "sha512-Ryg+D9tPYvcHbI3HknGfd6cgQaevwv/9lBpa3KbFrNWDcpsvc4BbpQLGpvaLNCJXM0Uzty/GDKuI2XktiIe0Ng==",
|
|
28
|
+
"license": "MIT"
|
|
29
|
+
},
|
|
30
|
+
"node_modules/async.util.eachoflimit": {
|
|
31
|
+
"version": "0.5.2",
|
|
32
|
+
"resolved": "https://registry.npmjs.org/async.util.eachoflimit/-/async.util.eachoflimit-0.5.2.tgz",
|
|
33
|
+
"integrity": "sha512-oZksH0sBW0AEOJKgBCQ79io9DZruoRBLTAea/Ik36pejR7pDpByvtXeuJsoZdPwSVslsrQcsUfucbUaiXYBnAQ==",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"async.util.keyiterator": "0.5.2",
|
|
37
|
+
"async.util.noop": "0.5.2",
|
|
38
|
+
"async.util.once": "0.5.2",
|
|
39
|
+
"async.util.onlyonce": "0.5.2"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"node_modules/async.util.ensureasync": {
|
|
43
|
+
"version": "0.5.2",
|
|
44
|
+
"resolved": "https://registry.npmjs.org/async.util.ensureasync/-/async.util.ensureasync-0.5.2.tgz",
|
|
45
|
+
"integrity": "sha512-sQufNz4JYLHO/7ZUklaTGJtiX36gCp28McNNcMZfVYPm/wqi1pKk4xRCPr2DOZDM6KfA54zjG36jQjBU2mLzXg==",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"async.util.restparam": "0.5.2",
|
|
49
|
+
"async.util.setimmediate": "0.5.2"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"node_modules/async.util.isarray": {
|
|
53
|
+
"version": "0.5.2",
|
|
54
|
+
"resolved": "https://registry.npmjs.org/async.util.isarray/-/async.util.isarray-0.5.2.tgz",
|
|
55
|
+
"integrity": "sha512-wbUzlrwON8RUgi+v/rhF0U99Ce8Osjcn+JP/mFNg6ymvShcobAOvE6cvLajSY5dPqKCOE1xfdhefgBif11zZgw==",
|
|
56
|
+
"license": "MIT"
|
|
57
|
+
},
|
|
58
|
+
"node_modules/async.util.isarraylike": {
|
|
59
|
+
"version": "0.5.2",
|
|
60
|
+
"resolved": "https://registry.npmjs.org/async.util.isarraylike/-/async.util.isarraylike-0.5.2.tgz",
|
|
61
|
+
"integrity": "sha512-DbFpsz3ZFNkohAW8IpGTlm8gotU32zpqe3Y2XkEA/G3XNO6rmUTKPpo7XgXUruoI+AsGi8+0zWpJHe7t1sLiAg==",
|
|
62
|
+
"license": "MIT",
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"async.util.isarray": "0.5.2"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"node_modules/async.util.keyiterator": {
|
|
68
|
+
"version": "0.5.2",
|
|
69
|
+
"resolved": "https://registry.npmjs.org/async.util.keyiterator/-/async.util.keyiterator-0.5.2.tgz",
|
|
70
|
+
"integrity": "sha512-cktrETawCwgu13y3KZs2uMGFnNHc+IjKPZsavtRaoCjLELkePb2co4zrr+ghPvEqLXZIJPTKqC2HFZgJTssMVw==",
|
|
71
|
+
"license": "MIT",
|
|
72
|
+
"dependencies": {
|
|
73
|
+
"async.util.isarraylike": "0.5.2",
|
|
74
|
+
"async.util.keys": "0.5.2"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"node_modules/async.util.keys": {
|
|
78
|
+
"version": "0.5.2",
|
|
79
|
+
"resolved": "https://registry.npmjs.org/async.util.keys/-/async.util.keys-0.5.2.tgz",
|
|
80
|
+
"integrity": "sha512-umCOCRCRYwIC2Ho3fbuhKwIIe7OhQsVoVKGoF5GoQiGJUmjP4TG0Bmmcdpm7yW/znoIGKpnjKzVQz0niH4tfqw==",
|
|
81
|
+
"license": "MIT"
|
|
82
|
+
},
|
|
83
|
+
"node_modules/async.util.noop": {
|
|
84
|
+
"version": "0.5.2",
|
|
85
|
+
"resolved": "https://registry.npmjs.org/async.util.noop/-/async.util.noop-0.5.2.tgz",
|
|
86
|
+
"integrity": "sha512-AdwShXwE0KoskgqVJAck8zcM32nIHj3AC8ZN62ZaR5srhrY235Nw18vOJZWxcOfhxdVM0hRVKM8kMx7lcl7cCQ==",
|
|
87
|
+
"license": "MIT"
|
|
88
|
+
},
|
|
89
|
+
"node_modules/async.util.once": {
|
|
90
|
+
"version": "0.5.2",
|
|
91
|
+
"resolved": "https://registry.npmjs.org/async.util.once/-/async.util.once-0.5.2.tgz",
|
|
92
|
+
"integrity": "sha512-YQ5WPzDTt2jlblUDkq2I5RV/KiAJErJ4/0cEFhYPaZzqIuF/xDzdGvnEKe7UeuoMszsVPeajzcpKgkbwdb9MUA==",
|
|
93
|
+
"license": "MIT"
|
|
94
|
+
},
|
|
95
|
+
"node_modules/async.util.onlyonce": {
|
|
96
|
+
"version": "0.5.2",
|
|
97
|
+
"resolved": "https://registry.npmjs.org/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz",
|
|
98
|
+
"integrity": "sha512-UgQvkU9JZ+I0Cm1f56XyGXcII+J3d/5XWUuHpcevlItuA3WFSJcqZrsyAUck2FkRSD8BwYQX1zUTDp3SJMVESg==",
|
|
99
|
+
"license": "MIT"
|
|
100
|
+
},
|
|
101
|
+
"node_modules/async.util.restparam": {
|
|
102
|
+
"version": "0.5.2",
|
|
103
|
+
"resolved": "https://registry.npmjs.org/async.util.restparam/-/async.util.restparam-0.5.2.tgz",
|
|
104
|
+
"integrity": "sha512-Q9Z+zgmtMxFX5i7CnBvNOkgrL5hptztCqwarQluyNudUUk4iCmyjmsQl8MuQEjNh3gGqP5ayvDaextL1VXXgIg==",
|
|
105
|
+
"license": "MIT"
|
|
106
|
+
},
|
|
107
|
+
"node_modules/async.util.setimmediate": {
|
|
108
|
+
"version": "0.5.2",
|
|
109
|
+
"resolved": "https://registry.npmjs.org/async.util.setimmediate/-/async.util.setimmediate-0.5.2.tgz",
|
|
110
|
+
"integrity": "sha512-aCYF85ZFCQ9Xn0106GcOVx+LvFguIIzfbfRTOlQoie3G4KeSjURfA6f7CfpFAF09FNP2A1MtdjeFdvYeTGDebw==",
|
|
111
|
+
"license": "MIT"
|
|
112
|
+
},
|
|
113
|
+
"node_modules/async.util.withoutindex": {
|
|
114
|
+
"version": "0.5.2",
|
|
115
|
+
"resolved": "https://registry.npmjs.org/async.util.withoutindex/-/async.util.withoutindex-0.5.2.tgz",
|
|
116
|
+
"integrity": "sha512-CTHbQc+1kHkK6izoXIVIiYjePgmAzvXecETn/eVuzhwL9BDC3oFLNiIrr57fKwyarZyy8PedVIpQNrqgA9KzNA==",
|
|
117
|
+
"license": "MIT"
|
|
118
|
+
},
|
|
119
|
+
"node_modules/async.waterfall": {
|
|
120
|
+
"version": "0.5.2",
|
|
121
|
+
"resolved": "https://registry.npmjs.org/async.waterfall/-/async.waterfall-0.5.2.tgz",
|
|
122
|
+
"integrity": "sha512-3eC5jwgBF0/CNTAwBQYCMybqd6ResDwsdyl3+i5qf1L7fYekVR5gbMzpBca7VoZj1W0BFsHcvjW3UeJstEt2kQ==",
|
|
123
|
+
"license": "MIT",
|
|
124
|
+
"dependencies": {
|
|
125
|
+
"async.iterator": "0.5.2",
|
|
126
|
+
"async.util.ensureasync": "0.5.2",
|
|
127
|
+
"async.util.isarray": "0.5.2",
|
|
128
|
+
"async.util.noop": "0.5.2",
|
|
129
|
+
"async.util.once": "0.5.2",
|
|
130
|
+
"async.util.restparam": "0.5.2"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"node_modules/big.js": {
|
|
134
|
+
"version": "7.0.1",
|
|
135
|
+
"resolved": "https://registry.npmjs.org/big.js/-/big.js-7.0.1.tgz",
|
|
136
|
+
"integrity": "sha512-iFgV784tD8kq4ccF1xtNMZnXeZzVuXWWM+ERFzKQjv+A5G9HC8CY3DuV45vgzFFcW+u2tIvmF95+AzWgs6BjCg==",
|
|
137
|
+
"license": "MIT",
|
|
138
|
+
"engines": {
|
|
139
|
+
"node": "*"
|
|
140
|
+
},
|
|
141
|
+
"funding": {
|
|
142
|
+
"type": "opencollective",
|
|
143
|
+
"url": "https://opencollective.com/bigjs"
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"node_modules/cachetrax": {
|
|
147
|
+
"version": "1.0.4",
|
|
148
|
+
"resolved": "https://registry.npmjs.org/cachetrax/-/cachetrax-1.0.4.tgz",
|
|
149
|
+
"integrity": "sha512-VoqtXp+tEdcbmiR0eJcdERsaBKhmdeVjpZ2jeVadDq25iM7hvZAFu+BCKMHitWzpkgb/Dw4RAouQBGnXbADPBg==",
|
|
150
|
+
"license": "MIT",
|
|
151
|
+
"dependencies": {
|
|
152
|
+
"fable-serviceproviderbase": "^3.0.7"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"node_modules/cookie": {
|
|
156
|
+
"version": "1.1.1",
|
|
157
|
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
|
|
158
|
+
"integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
|
|
159
|
+
"license": "MIT",
|
|
160
|
+
"engines": {
|
|
161
|
+
"node": ">=18"
|
|
162
|
+
},
|
|
163
|
+
"funding": {
|
|
164
|
+
"type": "opencollective",
|
|
165
|
+
"url": "https://opencollective.com/express"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"node_modules/data-arithmatic": {
|
|
169
|
+
"version": "1.0.7",
|
|
170
|
+
"resolved": "https://registry.npmjs.org/data-arithmatic/-/data-arithmatic-1.0.7.tgz",
|
|
171
|
+
"integrity": "sha512-Z1SBuORrjrlCx9AAx2Cy4yBYrsqtKEz7BzdcLWLMT/t78q3N5/4qjA+63zeMYUAvp9EsIKfQ8X0++Ls9xwaLag==",
|
|
172
|
+
"license": "MIT",
|
|
173
|
+
"dependencies": {
|
|
174
|
+
"fable-serviceproviderbase": "^3.0.2"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"node_modules/dayjs": {
|
|
178
|
+
"version": "1.11.19",
|
|
179
|
+
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
|
|
180
|
+
"integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
|
|
181
|
+
"license": "MIT"
|
|
182
|
+
},
|
|
183
|
+
"node_modules/decompress-response": {
|
|
184
|
+
"version": "6.0.0",
|
|
185
|
+
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
|
186
|
+
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
|
|
187
|
+
"license": "MIT",
|
|
188
|
+
"dependencies": {
|
|
189
|
+
"mimic-response": "^3.1.0"
|
|
190
|
+
},
|
|
191
|
+
"engines": {
|
|
192
|
+
"node": ">=10"
|
|
193
|
+
},
|
|
194
|
+
"funding": {
|
|
195
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"node_modules/fable": {
|
|
199
|
+
"version": "3.1.53",
|
|
200
|
+
"resolved": "https://registry.npmjs.org/fable/-/fable-3.1.53.tgz",
|
|
201
|
+
"integrity": "sha512-2b7sWs1K3Bl9V8biZ5VSy36YvojanAAKvOZM7hGMg+opLLt/Pk/lIEvucz4m16Vz+C3UDLWf7WKJqdBoEj8A1w==",
|
|
202
|
+
"license": "MIT",
|
|
203
|
+
"dependencies": {
|
|
204
|
+
"async.eachlimit": "^0.5.2",
|
|
205
|
+
"async.waterfall": "^0.5.2",
|
|
206
|
+
"big.js": "^7.0.1",
|
|
207
|
+
"cachetrax": "^1.0.4",
|
|
208
|
+
"cookie": "^1.0.2",
|
|
209
|
+
"data-arithmatic": "^1.0.7",
|
|
210
|
+
"dayjs": "^1.11.19",
|
|
211
|
+
"fable-log": "^3.0.16",
|
|
212
|
+
"fable-serviceproviderbase": "^3.0.16",
|
|
213
|
+
"fable-settings": "^3.0.12",
|
|
214
|
+
"fable-uuid": "^3.0.11",
|
|
215
|
+
"manyfest": "^1.0.43",
|
|
216
|
+
"simple-get": "^4.0.1"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"node_modules/fable-log": {
|
|
220
|
+
"version": "3.0.16",
|
|
221
|
+
"resolved": "https://registry.npmjs.org/fable-log/-/fable-log-3.0.16.tgz",
|
|
222
|
+
"integrity": "sha512-o9/eIdak/iDy8Cc+Q8NeYUf7AwqYZvr3EaeeGmVd6X7+Ao/c1y5u9x5I54WZmwcYcySukmf2BEiQvS/itoliVw==",
|
|
223
|
+
"license": "MIT",
|
|
224
|
+
"dependencies": {
|
|
225
|
+
"fable-serviceproviderbase": "^3.0.15"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"node_modules/fable-serviceproviderbase": {
|
|
229
|
+
"version": "3.0.16",
|
|
230
|
+
"resolved": "https://registry.npmjs.org/fable-serviceproviderbase/-/fable-serviceproviderbase-3.0.16.tgz",
|
|
231
|
+
"integrity": "sha512-jvv1MO/xSNTInRwCFZz56ON4UNVwcOnLuLJlkfzqKXSbN9O8M6E7TYFExkM/UsG35dzDnApilz6Zmg3FvES4Cg==",
|
|
232
|
+
"license": "MIT"
|
|
233
|
+
},
|
|
234
|
+
"node_modules/fable-settings": {
|
|
235
|
+
"version": "3.0.12",
|
|
236
|
+
"resolved": "https://registry.npmjs.org/fable-settings/-/fable-settings-3.0.12.tgz",
|
|
237
|
+
"integrity": "sha512-zzvoLcsIp06vNu5dXYV5FSQD1V1APj2IaYbhj8SJ3IHmb9pUrQm63ejGEC4fEEk+jBznHHe+RH6OEwtx6plh+g==",
|
|
238
|
+
"license": "MIT",
|
|
239
|
+
"dependencies": {
|
|
240
|
+
"fable-serviceproviderbase": "^3.0.15",
|
|
241
|
+
"precedent": "^1.0.15"
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
"node_modules/fable-uuid": {
|
|
245
|
+
"version": "3.0.11",
|
|
246
|
+
"resolved": "https://registry.npmjs.org/fable-uuid/-/fable-uuid-3.0.11.tgz",
|
|
247
|
+
"integrity": "sha512-ZNFmcc2HI16J6rqiLfkShzzNgeHjbInM0Ur70tAgXlQm/jWqIpU3OFAyTesrz4dVQ5+wCxjp7PQadF7YJ0hNIw==",
|
|
248
|
+
"license": "MIT",
|
|
249
|
+
"dependencies": {
|
|
250
|
+
"fable-serviceproviderbase": "^3.0.15"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"node_modules/manyfest": {
|
|
254
|
+
"version": "1.0.44",
|
|
255
|
+
"resolved": "https://registry.npmjs.org/manyfest/-/manyfest-1.0.44.tgz",
|
|
256
|
+
"integrity": "sha512-8sI1zQ5lysMW879Lb5VtksmpOy4M2vZIl2IjIzMo5lOWu1MmLZGX/MQxdBu0Klnf4fJwscainclMYs9/P3JXUQ==",
|
|
257
|
+
"license": "MIT",
|
|
258
|
+
"dependencies": {
|
|
259
|
+
"fable-serviceproviderbase": "^3.0.15"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"node_modules/mimic-response": {
|
|
263
|
+
"version": "3.1.0",
|
|
264
|
+
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
|
|
265
|
+
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
|
|
266
|
+
"license": "MIT",
|
|
267
|
+
"engines": {
|
|
268
|
+
"node": ">=10"
|
|
269
|
+
},
|
|
270
|
+
"funding": {
|
|
271
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"node_modules/once": {
|
|
275
|
+
"version": "1.4.0",
|
|
276
|
+
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
277
|
+
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
|
278
|
+
"license": "ISC",
|
|
279
|
+
"dependencies": {
|
|
280
|
+
"wrappy": "1"
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
"node_modules/precedent": {
|
|
284
|
+
"version": "1.0.15",
|
|
285
|
+
"resolved": "https://registry.npmjs.org/precedent/-/precedent-1.0.15.tgz",
|
|
286
|
+
"integrity": "sha512-tidXY4JvTudvJ/Jmb8OzHFpX6qUSPwmS7K/BChA7xDb7eqmfHjH3AAO+IhCz3k7k+bh31YNdblSIEkYnCIYelw==",
|
|
287
|
+
"license": "MIT",
|
|
288
|
+
"bin": {
|
|
289
|
+
"precedent": "bin/Precedent"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"node_modules/simple-concat": {
|
|
293
|
+
"version": "1.0.1",
|
|
294
|
+
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
|
|
295
|
+
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
|
|
296
|
+
"funding": [
|
|
297
|
+
{
|
|
298
|
+
"type": "github",
|
|
299
|
+
"url": "https://github.com/sponsors/feross"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"type": "patreon",
|
|
303
|
+
"url": "https://www.patreon.com/feross"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"type": "consulting",
|
|
307
|
+
"url": "https://feross.org/support"
|
|
308
|
+
}
|
|
309
|
+
],
|
|
310
|
+
"license": "MIT"
|
|
311
|
+
},
|
|
312
|
+
"node_modules/simple-get": {
|
|
313
|
+
"version": "4.0.1",
|
|
314
|
+
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
|
|
315
|
+
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
|
|
316
|
+
"funding": [
|
|
317
|
+
{
|
|
318
|
+
"type": "github",
|
|
319
|
+
"url": "https://github.com/sponsors/feross"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"type": "patreon",
|
|
323
|
+
"url": "https://www.patreon.com/feross"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"type": "consulting",
|
|
327
|
+
"url": "https://feross.org/support"
|
|
328
|
+
}
|
|
329
|
+
],
|
|
330
|
+
"license": "MIT",
|
|
331
|
+
"dependencies": {
|
|
332
|
+
"decompress-response": "^6.0.0",
|
|
333
|
+
"once": "^1.3.1",
|
|
334
|
+
"simple-concat": "^1.0.0"
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"node_modules/wrappy": {
|
|
338
|
+
"version": "1.0.2",
|
|
339
|
+
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
340
|
+
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
|
341
|
+
"license": "ISC"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "retold-quickstart-layer1-fable",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Retold Quickstart: Layer 1 - Fable (Core DI, Configuration, Logging)",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start": "node index.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"fable": "^3.1.51"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Layer 2: Meadow - Data Access
|
|
2
|
+
|
|
3
|
+
> Retold Layer 2 — Data broker / ORM: Meadow + FoxHound (query DSL) + Stricture
|
|
4
|
+
> (schema DDL), with pluggable database connections (MySQL, MSSQL, SQLite)
|
|
5
|
+
|
|
6
|
+
Meadow provides provider-agnostic CRUD operations with automatic audit columns,
|
|
7
|
+
soft deletes, and schema-driven query generation through FoxHound.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
A MySQL server running locally on port 3306 with root access.
|
|
12
|
+
|
|
13
|
+
## Run
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install
|
|
17
|
+
npm run setup # Creates the database and table
|
|
18
|
+
npm start # Runs CRUD operations
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or run both steps together:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install
|
|
25
|
+
npm run demo
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## What This Demonstrates
|
|
29
|
+
|
|
30
|
+
- Connecting to MySQL via the Meadow connection provider
|
|
31
|
+
- Defining entity schemas (Meadow schema + JSON schema)
|
|
32
|
+
- Full CRUD operations: Create, Read, Reads, Update, Delete
|
|
33
|
+
- FoxHound query builder with filters, sorting, and pagination
|
|
34
|
+
- Audit columns (CreateDate, UpdateDate) and soft deletes
|