retold 1.0.6 → 4.0.2

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.
Files changed (119) hide show
  1. package/.claude/settings.local.json +84 -0
  2. package/CLAUDE.md +52 -0
  3. package/docs/.nojekyll +0 -0
  4. package/docs/README.md +162 -0
  5. package/docs/_sidebar.md +78 -0
  6. package/docs/_topbar.md +6 -0
  7. package/docs/architecture/architecture.md +312 -0
  8. package/docs/architecture/module-architecture.md +234 -0
  9. package/docs/architecture/modules.md +99 -0
  10. package/docs/cover.md +15 -0
  11. package/docs/css/docuserve.css +73 -0
  12. package/docs/examples/examples.md +71 -0
  13. package/docs/examples/todolist/todo-list-cli-client.md +178 -0
  14. package/docs/examples/todolist/todo-list-console-client.md +152 -0
  15. package/docs/examples/todolist/todo-list-model.md +114 -0
  16. package/docs/examples/todolist/todo-list-server.md +128 -0
  17. package/docs/examples/todolist/todo-list-web-client.md +177 -0
  18. package/docs/examples/todolist/todo-list.md +162 -0
  19. package/docs/getting-started.md +273 -0
  20. package/docs/index.html +39 -0
  21. package/docs/modules/fable.md +198 -0
  22. package/docs/modules/meadow.md +209 -0
  23. package/docs/modules/orator.md +165 -0
  24. package/docs/modules/pict.md +235 -0
  25. package/docs/modules/utility.md +54 -0
  26. package/docs/retold-building-documentation.md +33 -0
  27. package/docs/retold-catalog.json +1405 -0
  28. package/docs/retold-keyword-index.json +203389 -0
  29. package/examples/quickstart/README.md +47 -0
  30. package/examples/quickstart/layer1/README.md +21 -0
  31. package/examples/quickstart/layer1/index.js +49 -0
  32. package/examples/quickstart/layer1/package-lock.json +344 -0
  33. package/examples/quickstart/layer1/package.json +12 -0
  34. package/examples/quickstart/layer2/README.md +34 -0
  35. package/examples/quickstart/layer2/index.js +251 -0
  36. package/examples/quickstart/layer2/package-lock.json +4468 -0
  37. package/examples/quickstart/layer2/package.json +17 -0
  38. package/examples/quickstart/layer2/setup-database.js +61 -0
  39. package/examples/quickstart/layer3/README.md +39 -0
  40. package/examples/quickstart/layer3/index.js +91 -0
  41. package/examples/quickstart/layer3/package-lock.json +1936 -0
  42. package/examples/quickstart/layer3/package.json +14 -0
  43. package/examples/quickstart/layer4/README.md +47 -0
  44. package/examples/quickstart/layer4/generate-build-config.js +18 -0
  45. package/examples/quickstart/layer4/html/index.html +17 -0
  46. package/examples/quickstart/layer4/package-lock.json +13206 -0
  47. package/examples/quickstart/layer4/package.json +38 -0
  48. package/examples/quickstart/layer4/server.js +28 -0
  49. package/examples/quickstart/layer4/source/BookStore-Application-Config.json +15 -0
  50. package/examples/quickstart/layer4/source/BookStore-Application.js +54 -0
  51. package/examples/quickstart/layer4/source/providers/Router-Config.json +18 -0
  52. package/examples/quickstart/layer4/source/views/View-About.js +38 -0
  53. package/examples/quickstart/layer4/source/views/View-Home.js +50 -0
  54. package/examples/quickstart/layer4/source/views/View-Layout.js +60 -0
  55. package/examples/quickstart/layer5/README.md +26 -0
  56. package/examples/quickstart/layer5/index.js +121 -0
  57. package/examples/quickstart/layer5/package-lock.json +345 -0
  58. package/examples/quickstart/layer5/package.json +13 -0
  59. package/examples/todo-list/Dockerfile +45 -0
  60. package/examples/todo-list/README.md +394 -0
  61. package/examples/todo-list/cli-client/package-lock.json +418 -0
  62. package/examples/todo-list/cli-client/package.json +19 -0
  63. package/examples/todo-list/cli-client/source/TodoCLI-CLIProgram.js +30 -0
  64. package/examples/todo-list/cli-client/source/TodoCLI-Run.js +3 -0
  65. package/examples/todo-list/cli-client/source/commands/add/TodoCLI-Command-Add.js +74 -0
  66. package/examples/todo-list/cli-client/source/commands/complete/TodoCLI-Command-Complete.js +84 -0
  67. package/examples/todo-list/cli-client/source/commands/list/TodoCLI-Command-List.js +110 -0
  68. package/examples/todo-list/cli-client/source/commands/remove/TodoCLI-Command-Remove.js +49 -0
  69. package/examples/todo-list/cli-client/source/services/TodoCLI-Service-API.js +92 -0
  70. package/examples/todo-list/console-client/console-client.cjs +913 -0
  71. package/examples/todo-list/console-client/package-lock.json +426 -0
  72. package/examples/todo-list/console-client/package.json +19 -0
  73. package/examples/todo-list/console-client/views/PictView-TUI-Header.cjs +43 -0
  74. package/examples/todo-list/console-client/views/PictView-TUI-Layout.cjs +58 -0
  75. package/examples/todo-list/console-client/views/PictView-TUI-StatusBar.cjs +41 -0
  76. package/examples/todo-list/console-client/views/PictView-TUI-TaskList.cjs +104 -0
  77. package/examples/todo-list/docker-motd.sh +36 -0
  78. package/examples/todo-list/docker-run.sh +2 -0
  79. package/examples/todo-list/docker-shell.sh +2 -0
  80. package/examples/todo-list/model/MeadowSchema-Task.json +152 -0
  81. package/examples/todo-list/model/Task-Compiled.json +25 -0
  82. package/examples/todo-list/model/Task.mddl +15 -0
  83. package/examples/todo-list/model/data/seeded_todo_events.csv +1001 -0
  84. package/examples/todo-list/server/database-initialization-service.cjs +273 -0
  85. package/examples/todo-list/server/package-lock.json +6113 -0
  86. package/examples/todo-list/server/package.json +19 -0
  87. package/examples/todo-list/server/server.cjs +138 -0
  88. package/examples/todo-list/web-client/css/todolist-theme.css +235 -0
  89. package/examples/todo-list/web-client/generate-build-config.cjs +18 -0
  90. package/examples/todo-list/web-client/html/index.html +18 -0
  91. package/examples/todo-list/web-client/package-lock.json +12030 -0
  92. package/examples/todo-list/web-client/package.json +43 -0
  93. package/examples/todo-list/web-client/source/TodoList-Application-Config.json +12 -0
  94. package/examples/todo-list/web-client/source/TodoList-Application.cjs +383 -0
  95. package/examples/todo-list/web-client/source/providers/Provider-TaskData.cjs +243 -0
  96. package/examples/todo-list/web-client/source/providers/Router-Config.json +32 -0
  97. package/examples/todo-list/web-client/source/views/View-Layout.cjs +75 -0
  98. package/examples/todo-list/web-client/source/views/View-TaskForm.cjs +87 -0
  99. package/examples/todo-list/web-client/source/views/View-TaskList.cjs +127 -0
  100. package/examples/todo-list/web-client/source/views/calendar/View-MonthView.cjs +293 -0
  101. package/examples/todo-list/web-client/source/views/calendar/View-WeekView.cjs +149 -0
  102. package/examples/todo-list/web-client/source/views/calendar/View-YearView.cjs +226 -0
  103. package/modules/.claude/settings.local.json +52 -0
  104. package/modules/CLAUDE.md +60 -0
  105. package/modules/Checkout.sh +42 -0
  106. package/modules/Include-Retold-Module-List.sh +15 -0
  107. package/modules/Retold-Modules.md +24 -0
  108. package/modules/Status.sh +59 -0
  109. package/modules/Update.sh +45 -0
  110. package/modules/fable/Fable.md +2 -0
  111. package/modules/meadow/Meadow.md +1 -0
  112. package/modules/orator/Orator.md +1 -0
  113. package/modules/pict/Pict.md +1 -0
  114. package/package.json +30 -35
  115. package/source/Retold.cjs +2 -0
  116. package/test/Retold_tests.js +23 -41
  117. package/.travis.yml +0 -13
  118. package/source/Retold-Meadow-Macros.js +0 -269
  119. package/source/Retold.js +0 -48
@@ -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