functional-models 2.1.13 → 3.0.0

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/lib.js CHANGED
@@ -12,15 +12,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.isModelInstance = exports.mergeValidators = exports.getCommonNumberValidators = exports.getValidatorFromConfigElseEmpty = exports.getCommonTextValidators = exports.getValueForReferencedModel = exports.getValueForModelInstance = exports.isReferencedProperty = void 0;
15
+ exports.NULL_METHOD = exports.NULL_ENDPOINT = exports.populateApiInformation = exports.buildValidEndpoint = exports.getModelName = exports.isModelInstance = exports.mergeValidators = exports.getCommonNumberValidators = exports.getValidatorFromConfigElseEmpty = exports.getCommonTextValidators = exports.getValueForReferencedModel = exports.getValueForModelInstance = exports.isReferencedProperty = void 0;
16
+ const openapi_types_1 = require("openapi-types");
17
+ const kebabCase_1 = __importDefault(require("lodash/kebabCase"));
18
+ const merge_1 = __importDefault(require("lodash/merge"));
16
19
  const get_1 = __importDefault(require("lodash/get"));
20
+ const types_1 = require("./types");
17
21
  const utils_1 = require("./utils");
18
22
  const validation_1 = require("./validation");
23
+ var HttpMethods = openapi_types_1.OpenAPIV3.HttpMethods;
24
+ const NULL_ENDPOINT = 'NULL';
25
+ exports.NULL_ENDPOINT = NULL_ENDPOINT;
26
+ const NULL_METHOD = HttpMethods.HEAD;
27
+ exports.NULL_METHOD = NULL_METHOD;
28
+ const ID_KEY = ':id';
19
29
  const getValueForReferencedModel = (modelInstance, path) => __awaiter(void 0, void 0, void 0, function* () {
20
30
  const [head, tail] = (0, utils_1.createHeadAndTail)(path.split('.'), '.');
21
31
  // If there are no nested keys, just return the reference id.
22
32
  if (!tail) {
23
- return modelInstance.references[head]();
33
+ return modelInstance.getReferences()[head]();
24
34
  }
25
35
  const modelReference = yield modelInstance.get[head]();
26
36
  if (modelReference.toObj) {
@@ -41,7 +51,7 @@ const getValueForModelInstance = (modelInstance, path) => __awaiter(void 0, void
41
51
  });
42
52
  exports.getValueForModelInstance = getValueForModelInstance;
43
53
  const isReferencedProperty = (modelInstance, key) => {
44
- return modelInstance.references[key];
54
+ return modelInstance.getReferences()[key];
45
55
  };
46
56
  exports.isReferencedProperty = isReferencedProperty;
47
57
  const getCommonTextValidators = (config) => {
@@ -51,9 +61,7 @@ const getCommonTextValidators = (config) => {
51
61
  ];
52
62
  };
53
63
  exports.getCommonTextValidators = getCommonTextValidators;
54
- const getValidatorFromConfigElseEmpty = (input,
55
- // eslint-disable-next-line no-unused-vars
56
- validatorGetter) => {
64
+ const getValidatorFromConfigElseEmpty = (input, validatorGetter) => {
57
65
  if (input !== undefined) {
58
66
  const validator = validatorGetter(input);
59
67
  return validator;
@@ -68,13 +76,117 @@ const getCommonNumberValidators = (config) => {
68
76
  ];
69
77
  };
70
78
  exports.getCommonNumberValidators = getCommonNumberValidators;
71
- const mergeValidators = (config, validators) => {
79
+ const mergeValidators = (config, ...validators) => {
72
80
  return [...validators, ...((config === null || config === void 0 ? void 0 : config.validators) ? config.validators : [])];
73
81
  };
74
82
  exports.mergeValidators = mergeValidators;
75
83
  const isModelInstance = (obj) => {
76
84
  // @ts-ignore
77
- return Boolean(obj && obj.getPrimaryKeyName);
85
+ return Boolean(obj && obj.getPrimaryKey);
78
86
  };
79
87
  exports.isModelInstance = isModelInstance;
88
+ const getModelName = (namespace, pluralName) => {
89
+ return (0, kebabCase_1.default)(`${namespace}-${pluralName}`).toLowerCase();
90
+ };
91
+ exports.getModelName = getModelName;
92
+ const buildValidEndpoint = (...components) => {
93
+ const suffix = components
94
+ .map(x => {
95
+ if (x === ID_KEY) {
96
+ return x;
97
+ }
98
+ return (0, kebabCase_1.default)(x);
99
+ })
100
+ .map(s => s.toLowerCase())
101
+ .join('/');
102
+ return `/${suffix}`;
103
+ };
104
+ exports.buildValidEndpoint = buildValidEndpoint;
105
+ const _generateRestInfo = (method, withId, ...additional) => (pluralName, namespace) => (existing) => {
106
+ if (existing) {
107
+ return Object.assign({
108
+ // Default add security, then override it.
109
+ security: {} }, existing);
110
+ }
111
+ const endpoint = withId
112
+ ? buildValidEndpoint(namespace, pluralName, ID_KEY)
113
+ : buildValidEndpoint(namespace, pluralName, ...additional);
114
+ return {
115
+ method,
116
+ endpoint,
117
+ // We cannot auto create security.
118
+ security: {},
119
+ };
120
+ };
121
+ const _apiMethodToRestInfoGenerator = {
122
+ [types_1.ApiMethod.create]: _generateRestInfo(HttpMethods.POST, false),
123
+ [types_1.ApiMethod.retrieve]: _generateRestInfo(HttpMethods.GET, true),
124
+ [types_1.ApiMethod.update]: _generateRestInfo(HttpMethods.PUT, true),
125
+ [types_1.ApiMethod.delete]: _generateRestInfo(HttpMethods.DELETE, true),
126
+ [types_1.ApiMethod.search]: _generateRestInfo(HttpMethods.POST, false, 'search'),
127
+ };
128
+ const getNullRestInfo = () => {
129
+ return {
130
+ endpoint: NULL_ENDPOINT,
131
+ method: NULL_METHOD,
132
+ security: {},
133
+ };
134
+ };
135
+ const _fillOutRestInfo = (pluralName, namespace, partial, nullRest) => {
136
+ const finishedRestInfo = Object.entries(types_1.ApiMethod).reduce((acc, [, method]) => {
137
+ const existing = partial && partial.rest && partial.rest[method]
138
+ ? partial.rest[method]
139
+ : undefined;
140
+ const restInfo = _apiMethodToRestInfoGenerator[method](pluralName, namespace)(existing);
141
+ return (0, merge_1.default)(acc, {
142
+ [method]: restInfo,
143
+ });
144
+ }, nullRest);
145
+ return {
146
+ noPublish: false,
147
+ onlyPublish: [],
148
+ rest: finishedRestInfo,
149
+ createOnlyOne: (partial === null || partial === void 0 ? void 0 : partial.createOnlyOne) || false,
150
+ };
151
+ };
152
+ const populateApiInformation = (pluralName, namespace, partial) => {
153
+ const nullRest = {
154
+ delete: getNullRestInfo(),
155
+ search: getNullRestInfo(),
156
+ update: getNullRestInfo(),
157
+ retrieve: getNullRestInfo(),
158
+ create: getNullRestInfo(),
159
+ };
160
+ if (!partial) {
161
+ return _fillOutRestInfo(pluralName, namespace, partial, nullRest);
162
+ }
163
+ // Are we not going to publish at all? All "nulled" out.
164
+ if (partial.noPublish) {
165
+ return {
166
+ onlyPublish: [],
167
+ noPublish: true,
168
+ rest: nullRest,
169
+ createOnlyOne: false,
170
+ };
171
+ }
172
+ const rest = partial.rest || {};
173
+ // Should we only publish some but not all?
174
+ if (partial.onlyPublish && partial.onlyPublish.length > 0) {
175
+ return partial.onlyPublish.reduce((acc, method) => {
176
+ const restInfo = _apiMethodToRestInfoGenerator[method](pluralName, namespace)(rest[method]);
177
+ return (0, merge_1.default)(acc, {
178
+ rest: {
179
+ [method]: restInfo,
180
+ },
181
+ });
182
+ }, {
183
+ noPublish: false,
184
+ onlyPublish: partial.onlyPublish,
185
+ createOnlyOne: Boolean(partial.createOnlyOne),
186
+ rest: nullRest,
187
+ });
188
+ }
189
+ return _fillOutRestInfo(pluralName, namespace, partial, nullRest);
190
+ };
191
+ exports.populateApiInformation = populateApiInformation;
80
192
  //# sourceMappingURL=lib.js.map
package/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"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"}
package/models.d.ts CHANGED
@@ -1,4 +1,14 @@
1
- import { Model, ModelFactory } from './interfaces';
2
- declare const BaseModel: ModelFactory;
1
+ import { ModelFactory, RestInfo } from './types';
2
+ /**
3
+ * An out of the box ModelFactory that can create Models.
4
+ * @param options - Any additional model options
5
+ * @returns A simple Model function ready for creating models. See {@link ModelType}
6
+ */
3
7
  declare const Model: ModelFactory;
4
- export { BaseModel, Model };
8
+ /**
9
+ * A useful function for determining if a RestInfo found in an ApiInfo is "null" or not.
10
+ * That is, whether it should be used and considered.
11
+ * @param restInfo
12
+ */
13
+ declare const isNullRestInfo: (restInfo: RestInfo) => boolean;
14
+ export { Model, isNullRestInfo };
package/models.js CHANGED
@@ -3,27 +3,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Model = exports.BaseModel = void 0;
6
+ exports.isNullRestInfo = exports.Model = void 0;
7
7
  const merge_1 = __importDefault(require("lodash/merge"));
8
8
  const serialization_1 = require("./serialization");
9
9
  const validation_1 = require("./validation");
10
- const properties_1 = require("./properties");
11
- const lazy_1 = require("./lazy");
10
+ const lib_1 = require("./lib");
12
11
  const utils_1 = require("./utils");
13
12
  const _defaultOptions = () => ({
14
- instanceCreatedCallback: null,
13
+ instanceCreatedCallback: undefined,
15
14
  });
16
15
  const _convertOptions = (options) => {
17
16
  const r = (0, merge_1.default)({}, _defaultOptions(), options);
18
17
  return r;
19
18
  };
20
- const _createModelDefWithPrimaryKey = (modelDefinition) => {
21
- const properties = (0, merge_1.default)({
22
- id: (0, properties_1.UniqueId)({ required: true }),
23
- }, modelDefinition.properties);
24
- return Object.assign(Object.assign({}, modelDefinition), { getPrimaryKeyName: () => 'id', properties });
19
+ const _toModelDefinition = (minimal) => {
20
+ return Object.assign({ singularName: (0, utils_1.singularize)(minimal.pluralName), displayName: (0, utils_1.toTitleCase)(minimal.pluralName), description: '', primaryKeyName: 'id', modelValidators: [] }, minimal);
25
21
  };
26
- const BaseModel = (pluralName, modelDefinition, options) => {
22
+ const _validateModelDefinition = (modelDefinition) => {
23
+ const primaryKeyProperty =
24
+ // @ts-ignore
25
+ modelDefinition.properties[modelDefinition.primaryKeyName || 'id'];
26
+ if (!primaryKeyProperty) {
27
+ throw new Error(`Property missing for primaryKey named ${modelDefinition.primaryKeyName}`);
28
+ }
29
+ if (!modelDefinition.pluralName) {
30
+ throw new Error(`Must include pluralName for model.`);
31
+ }
32
+ if (!modelDefinition.namespace) {
33
+ throw new Error(`Must include namespace for model.`);
34
+ }
35
+ };
36
+ /**
37
+ * An out of the box ModelFactory that can create Models.
38
+ * @param options - Any additional model options
39
+ * @returns A simple Model function ready for creating models. See {@link ModelType}
40
+ */
41
+ const Model = (minimalModelDefinitions, options) => {
42
+ _validateModelDefinition(minimalModelDefinitions);
27
43
  /*
28
44
  * This non-functional approach is specifically used to
29
45
  * allow instances to be able to refer back to its parent without
@@ -34,11 +50,8 @@ const BaseModel = (pluralName, modelDefinition, options) => {
34
50
  // eslint-disable-next-line functional/no-let
35
51
  let model = null;
36
52
  const theOptions = _convertOptions(options);
37
- modelDefinition = !modelDefinition.getPrimaryKeyName
38
- ? _createModelDefWithPrimaryKey(modelDefinition)
39
- : modelDefinition;
40
- // @ts-ignore
41
- const getPrimaryKeyName = () => modelDefinition.getPrimaryKeyName();
53
+ const modelDefinition = _toModelDefinition(minimalModelDefinitions);
54
+ const getPrimaryKeyName = () => modelDefinition.primaryKeyName;
42
55
  const getPrimaryKey = (loadedInternals) => {
43
56
  const property = loadedInternals.get[getPrimaryKeyName()];
44
57
  return property();
@@ -51,11 +64,13 @@ const BaseModel = (pluralName, modelDefinition, options) => {
51
64
  validators: {},
52
65
  references: {},
53
66
  };
54
- const loadedInternals = Object.entries(modelDefinition.properties).reduce((acc, [key, property]) => {
55
- const propertyGetter = (0, lazy_1.lazyValueSync)(() => property.createGetter(
56
- // @ts-ignore
57
- instanceValues[key], instanceValues, instance)());
58
- // @ts-ignore
67
+ const prop = Object.entries(modelDefinition.properties);
68
+ const loadedInternals = prop.reduce((acc, [key, property]) => {
69
+ const propertyGetter = (0, utils_1.memoizeSync)(() => property.createGetter(
70
+ //@ts-ignore
71
+ instanceValues[key], instanceValues,
72
+ // NOTE: By the time it gets here, it has already been implemented.
73
+ instance)());
59
74
  const propertyValidator = property.getValidator(propertyGetter);
60
75
  const fleshedOutInstanceProperties = {
61
76
  get: {
@@ -78,19 +93,29 @@ const BaseModel = (pluralName, modelDefinition, options) => {
78
93
  return (0, merge_1.default)(acc, fleshedOutInstanceProperties, referencedProperty);
79
94
  }, startingInternals);
80
95
  const getModel = () => model;
81
- const toObj = (0, serialization_1.toJsonAble)(loadedInternals.get);
82
- const validate = (options = {}) => {
96
+ // We are casting this, because the output type is really complicated.
97
+ // and memoizing this is very important.
98
+ // @ts-ignore
99
+ const toObj = (0, utils_1.memoizeAsync)(() => {
100
+ return (0, serialization_1.toJsonAble)(loadedInternals.get)();
101
+ });
102
+ const validate = (0, utils_1.memoizeAsync)((options = {}) => {
83
103
  return Promise.resolve().then(() => {
84
- return (0, validation_1.createModelValidator)(loadedInternals.validators, modelDefinition.modelValidators || [])(instance, options);
104
+ return (0, validation_1.createModelValidator)(loadedInternals.validators, modelDefinition.modelValidators)(instance, options);
85
105
  });
86
- };
87
- instance = (0, merge_1.default)(loadedInternals, {
106
+ });
107
+ const getReferences = () => loadedInternals.references;
108
+ const getValidators = () => loadedInternals.validators;
109
+ // @ts-ignore
110
+ instance = {
111
+ get: loadedInternals.get,
112
+ getReferences,
113
+ getValidators,
88
114
  getModel,
89
115
  toObj,
90
116
  getPrimaryKey: () => getPrimaryKey(loadedInternals),
91
- getPrimaryKeyName,
92
117
  validate,
93
- });
118
+ };
94
119
  if (theOptions.instanceCreatedCallback) {
95
120
  const toCall = Array.isArray(theOptions.instanceCreatedCallback)
96
121
  ? theOptions.instanceCreatedCallback
@@ -99,21 +124,31 @@ const BaseModel = (pluralName, modelDefinition, options) => {
99
124
  }
100
125
  return instance;
101
126
  };
127
+ const getApiInfo = (0, utils_1.memoizeSync)(() => {
128
+ return (0, lib_1.populateApiInformation)(modelDefinition.pluralName, modelDefinition.namespace, modelDefinition.api);
129
+ });
102
130
  // This sets the model that is used by the instances later.
103
- // @ts-ignore
104
- model = (0, merge_1.default)({}, {
131
+ model = {
132
+ /**
133
+ * Creates a model instance.
134
+ */
105
135
  create,
106
- getName: () => pluralName,
107
- getSingularName: () => modelDefinition.singularName || (0, utils_1.singularize)(pluralName),
108
- getDisplayName: () => modelDefinition.displayName || (0, utils_1.toTitleCase)(pluralName),
109
- getModelDefinition: () => modelDefinition,
110
- getPrimaryKeyName,
136
+ getName: () => (0, lib_1.getModelName)(modelDefinition.namespace, modelDefinition.pluralName),
137
+ getModelDefinition: (0, utils_1.memoizeSync)(() => modelDefinition),
111
138
  getPrimaryKey,
112
- getOptions: () => theOptions,
113
- });
139
+ getOptions: () => (Object.assign({}, theOptions)),
140
+ getApiInfo,
141
+ };
114
142
  return model;
115
143
  };
116
- exports.BaseModel = BaseModel;
117
- const Model = BaseModel;
118
144
  exports.Model = Model;
145
+ /**
146
+ * A useful function for determining if a RestInfo found in an ApiInfo is "null" or not.
147
+ * That is, whether it should be used and considered.
148
+ * @param restInfo
149
+ */
150
+ const isNullRestInfo = (restInfo) => {
151
+ return restInfo.method === lib_1.NULL_METHOD && restInfo.endpoint === lib_1.NULL_ENDPOINT;
152
+ };
153
+ exports.isNullRestInfo = isNullRestInfo;
119
154
  //# sourceMappingURL=models.js.map
package/models.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "functional-models",
3
- "version": "2.1.13",
4
- "description": "A library for creating JavaScript function based models.",
3
+ "version": "3.0.0",
4
+ "description": "Functional models is ooey gooey framework for building and using awesome models EVERYWHERE.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
7
  "scripts": {
8
- "test": "mocha -r ts-node/register test/**/*.test.ts",
9
- "test:coverage": "NODE_OPTIONS='--max-old-space-size=8192' nyc npm run test",
8
+ "test": "mocha -r tsx --extensions ts,tsx 'test/**/*.{ts,tsx}'",
9
+ "mocha": "mocha -r tsx",
10
+ "test:coverage": "TS_NODE_PROJECT=tsconfig.test.json nyc npm run test",
10
11
  "test:watch": "nodemon -e '*' --watch test --watch src --exec npm run test:coverage",
11
12
  "commit": "cz",
12
13
  "feature-tests": "./node_modules/.bin/cucumber-js -p default",
13
14
  "coverage": "nyc --all --reporter=lcov npm test",
14
- "build": "tsc -p ./tsconfig.build.json && cp package.json ./dist && cp README.md ./dist",
15
+ "build": "rm -Rf ./dist && tsc && cp package.json ./dist && cp README.md ./dist",
15
16
  "build:watch": "nodemon -e '*' --watch ./src --exec npm run build",
16
17
  "prettier": "prettier --write .",
17
18
  "eslint": "eslint . --fix",
@@ -22,6 +23,8 @@
22
23
  "url": "git+https://github.com/monolithst/functional-models.git"
23
24
  },
24
25
  "keywords": [
26
+ "framework",
27
+ "models",
25
28
  "orm",
26
29
  "modeling",
27
30
  "functional"
@@ -41,6 +44,10 @@
41
44
  },
42
45
  "homepage": "https://github.com/monolithst/functional-models#readme",
43
46
  "nyc": {
47
+ "branches": 90,
48
+ "lines": 100,
49
+ "functions": 100,
50
+ "statements": 100,
44
51
  "extends": "@istanbuljs/nyc-config-typescript",
45
52
  "check-coverage": true,
46
53
  "all": true,
@@ -67,37 +74,43 @@
67
74
  "devDependencies": {
68
75
  "@cucumber/cucumber": "^11.0.0",
69
76
  "@date-fns/utc": "^1.2.0",
77
+ "@eslint/compat": "^1.2.0",
78
+ "@eslint/eslintrc": "^3.1.0",
79
+ "@eslint/js": "^9.12.0",
70
80
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
71
81
  "@types/async-lock": "^1.1.3",
72
- "@types/chai": "^4.2.22",
82
+ "@types/chai": "^5.0.1",
73
83
  "@types/chai-as-promised": "^7.1.4",
74
84
  "@types/lodash": "^4.14.176",
75
85
  "@types/mocha": "^9.0.0",
86
+ "@types/node": "^22.10.7",
76
87
  "@types/proxyquire": "^1.3.28",
77
88
  "@types/sinon": "^10.0.6",
78
- "@typescript-eslint/eslint-plugin": "^6.3.0",
79
- "@typescript-eslint/parser": "^6.3.0",
80
- "babel-eslint": "^10.1.0",
81
- "chai": "^4.3.0",
89
+ "@typescript-eslint/eslint-plugin": "^8.20.0",
90
+ "@typescript-eslint/parser": "^8.20.0",
91
+ "chai": "^5.1.2",
82
92
  "chai-as-promised": "^7.1.1",
83
93
  "cz-conventional-changelog": "^3.3.0",
84
- "eslint": "^8.46.0",
85
- "eslint-config-prettier": "^9.0.0",
86
- "eslint-import-resolver-typescript": "^3.6.0",
87
- "eslint-plugin-functional": "^6.0.0",
88
- "eslint-plugin-import": "^2.28.0",
89
- "mocha": "^10.4.0",
94
+ "eslint": "^9.18.0",
95
+ "eslint-config-prettier": "^9.1.0",
96
+ "eslint-import-resolver-typescript": "^3.6.3",
97
+ "eslint-plugin-functional": "~7.1.0",
98
+ "eslint-plugin-import": "^2.31.0",
99
+ "esprima": "^4.0.1",
100
+ "globals": "^15.14.0",
101
+ "mocha": "^11.0.1",
90
102
  "nodemon": "^3.1.0",
91
- "nyc": "^15.1.0",
103
+ "nyc": "^17.1.0",
92
104
  "proxyquire": "^2.1.3",
93
105
  "sinon": "^18.0.1",
94
- "ts-node": "^10.4.0",
95
- "typescript": "^4.5.4"
106
+ "ts-node": "^9.1.1",
107
+ "tsx": "^4.19.2",
108
+ "typescript": "^5.7.3"
96
109
  },
97
110
  "dependencies": {
98
111
  "async-lock": "^1.3.0",
99
- "date-fns": "^3.6.0",
100
112
  "get-random-values": "^1.2.2",
101
- "lodash": "^4.17.21"
113
+ "lodash": "^4.17.21",
114
+ "openapi-types": "^12.1.3"
102
115
  }
103
116
  }