@wemush/wols 0.1.0 → 1.3.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/CHANGELOG.md +170 -0
- package/README.md +204 -31
- package/dist/cjs/compact-url.d.ts +150 -0
- package/dist/cjs/compact-url.d.ts.map +1 -0
- package/dist/cjs/compact-url.js +64 -0
- package/dist/cjs/compact-url.js.map +1 -1
- package/dist/cjs/crypto/decrypt.d.ts +110 -0
- package/dist/cjs/crypto/decrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/decrypt.js +521 -90
- package/dist/cjs/crypto/decrypt.js.map +1 -1
- package/dist/cjs/crypto/encrypt.d.ts +132 -0
- package/dist/cjs/crypto/encrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/encrypt.js +288 -105
- package/dist/cjs/crypto/encrypt.js.map +1 -1
- package/dist/cjs/crypto/index.d.ts +12 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +15 -2
- package/dist/cjs/crypto/index.js.map +1 -1
- package/dist/cjs/crypto/shared.d.ts +116 -0
- package/dist/cjs/crypto/shared.d.ts.map +1 -0
- package/dist/cjs/crypto/shared.js +238 -0
- package/dist/cjs/crypto/shared.js.map +1 -0
- package/dist/cjs/errors.d.ts +133 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +39 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +29 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +70 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser.d.ts +30 -0
- package/dist/cjs/parser.d.ts.map +1 -0
- package/dist/cjs/parser.js +3 -0
- package/dist/cjs/parser.js.map +1 -1
- package/dist/cjs/qr/generate.d.ts +62 -0
- package/dist/cjs/qr/generate.d.ts.map +1 -0
- package/dist/cjs/qr/index.d.ts +10 -0
- package/dist/cjs/qr/index.d.ts.map +1 -0
- package/dist/cjs/specimen.d.ts +96 -0
- package/dist/cjs/specimen.d.ts.map +1 -0
- package/dist/cjs/specimen.js +95 -9
- package/dist/cjs/specimen.js.map +1 -1
- package/dist/cjs/types.d.ts +735 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +327 -3
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/cuid.d.ts +46 -0
- package/dist/cjs/utils/cuid.d.ts.map +1 -0
- package/dist/cjs/utils/cuid.js +6 -4
- package/dist/cjs/utils/cuid.js.map +1 -1
- package/dist/cjs/utils/environment.d.ts +137 -0
- package/dist/cjs/utils/environment.d.ts.map +1 -0
- package/dist/cjs/utils/environment.js +206 -0
- package/dist/cjs/utils/environment.js.map +1 -0
- package/dist/cjs/utils/iso8601.d.ts +79 -0
- package/dist/cjs/utils/iso8601.d.ts.map +1 -0
- package/dist/cjs/utils/migration.d.ts +162 -0
- package/dist/cjs/utils/migration.d.ts.map +1 -0
- package/dist/cjs/utils/migration.js +248 -0
- package/dist/cjs/utils/migration.js.map +1 -0
- package/dist/cjs/validator.d.ts +25 -0
- package/dist/cjs/validator.d.ts.map +1 -0
- package/dist/cjs/validator.js +85 -21
- package/dist/cjs/validator.js.map +1 -1
- package/dist/esm/compact-url.js +62 -0
- package/dist/esm/compact-url.js.map +1 -1
- package/dist/esm/crypto/decrypt.js +517 -90
- package/dist/esm/crypto/decrypt.js.map +1 -1
- package/dist/esm/crypto/encrypt.js +284 -105
- package/dist/esm/crypto/encrypt.js.map +1 -1
- package/dist/esm/crypto/index.js +5 -3
- package/dist/esm/crypto/index.js.map +1 -1
- package/dist/esm/crypto/shared.js +222 -0
- package/dist/esm/crypto/shared.js.map +1 -0
- package/dist/esm/errors.js +37 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +26 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parser.js +3 -0
- package/dist/esm/parser.js.map +1 -1
- package/dist/esm/specimen.js +95 -10
- package/dist/esm/specimen.js.map +1 -1
- package/dist/esm/types.js +317 -2
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/cuid.js +6 -4
- package/dist/esm/utils/cuid.js.map +1 -1
- package/dist/esm/utils/environment.js +193 -0
- package/dist/esm/utils/environment.js.map +1 -0
- package/dist/esm/utils/migration.js +237 -0
- package/dist/esm/utils/migration.js.map +1 -0
- package/dist/esm/validator.js +86 -22
- package/dist/esm/validator.js.map +1 -1
- package/dist/types/compact-url.d.ts +46 -0
- package/dist/types/compact-url.d.ts.map +1 -1
- package/dist/types/crypto/decrypt.d.ts +95 -18
- package/dist/types/crypto/decrypt.d.ts.map +1 -1
- package/dist/types/crypto/encrypt.d.ts +114 -14
- package/dist/types/crypto/encrypt.d.ts.map +1 -1
- package/dist/types/crypto/index.d.ts +5 -3
- package/dist/types/crypto/index.d.ts.map +1 -1
- package/dist/types/crypto/shared.d.ts +116 -0
- package/dist/types/crypto/shared.d.ts.map +1 -0
- package/dist/types/errors.d.ts +31 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +15 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/parser.d.ts.map +1 -1
- package/dist/types/specimen.d.ts +29 -4
- package/dist/types/specimen.d.ts.map +1 -1
- package/dist/types/types.d.ts +483 -17
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/cuid.d.ts +5 -3
- package/dist/types/utils/cuid.d.ts.map +1 -1
- package/dist/types/utils/environment.d.ts +137 -0
- package/dist/types/utils/environment.d.ts.map +1 -0
- package/dist/types/utils/migration.d.ts +162 -0
- package/dist/types/utils/migration.d.ts.map +1 -0
- package/dist/types/validator.d.ts +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/package.json +32 -14
package/dist/cjs/specimen.js
CHANGED
|
@@ -3,15 +3,31 @@
|
|
|
3
3
|
* Specimen Creation and Serialization
|
|
4
4
|
*
|
|
5
5
|
* This module provides functions to create and serialize
|
|
6
|
-
* WOLS v1.
|
|
6
|
+
* WOLS v1.3.0 compliant specimen objects.
|
|
7
7
|
*
|
|
8
8
|
* @module specimen
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.PRIMORDIA_AS_TYPE_WARNING = void 0;
|
|
11
12
|
exports.createSpecimen = createSpecimen;
|
|
12
13
|
exports.serializeSpecimen = serializeSpecimen;
|
|
13
14
|
const types_js_1 = require("./types.js");
|
|
14
15
|
const cuid_js_1 = require("./utils/cuid.js");
|
|
16
|
+
const iso8601_js_1 = require("./utils/iso8601.js");
|
|
17
|
+
/**
|
|
18
|
+
* Warning code emitted when `PRIMORDIA` is supplied as a specimen type.
|
|
19
|
+
*
|
|
20
|
+
* @since 1.3.0
|
|
21
|
+
*/
|
|
22
|
+
exports.PRIMORDIA_AS_TYPE_WARNING = 'PRIMORDIA_AS_TYPE';
|
|
23
|
+
function primordiaWarning() {
|
|
24
|
+
return {
|
|
25
|
+
path: 'type',
|
|
26
|
+
code: exports.PRIMORDIA_AS_TYPE_WARNING,
|
|
27
|
+
message: `'PRIMORDIA' is a growth stage, not a specimen type; resolved to type 'FRUITING'`,
|
|
28
|
+
suggestion: `Use type: 'FRUITING', stage: 'PRIMORDIA'`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
15
31
|
/**
|
|
16
32
|
* Expand a strain input to a full Strain object.
|
|
17
33
|
* String inputs are expanded to { name: string }.
|
|
@@ -34,11 +50,17 @@ function expandStrain(strain) {
|
|
|
34
50
|
/**
|
|
35
51
|
* Create a new specimen with auto-generated ID and JSON-LD fields.
|
|
36
52
|
*
|
|
37
|
-
* This function creates a fully-formed WOLS v1.
|
|
53
|
+
* This function creates a fully-formed WOLS v1.3.0 compliant Specimen
|
|
38
54
|
* with automatic ID generation, version assignment, and JSON-LD context.
|
|
39
55
|
*
|
|
56
|
+
* Type aliases resolve case-insensitively. `PRIMORDIA` supplied as a type
|
|
57
|
+
* resolves to `FRUITING`, sets `stage: 'PRIMORDIA'` when no stage was given
|
|
58
|
+
* (a supplied stage is never overridden), and emits a warning.
|
|
59
|
+
*
|
|
40
60
|
* @param input - Specimen creation parameters
|
|
61
|
+
* @param options - `onWarning` receives non-fatal warnings (default: console.warn)
|
|
41
62
|
* @returns Fully-formed Specimen with JSON-LD fields
|
|
63
|
+
* @throws Error if the type is unknown or `created` is not ISO 8601
|
|
42
64
|
*
|
|
43
65
|
* @example
|
|
44
66
|
* ```typescript
|
|
@@ -68,26 +90,74 @@ function expandStrain(strain) {
|
|
|
68
90
|
* species: 'Ganoderma lucidum',
|
|
69
91
|
* strain: 'Reishi Red', // Auto-expands to { name: 'Reishi Red' }
|
|
70
92
|
* });
|
|
93
|
+
*
|
|
94
|
+
* // PRIMORDIA as a type (v1.3.0) -> type FRUITING, stage PRIMORDIA, plus a warning
|
|
95
|
+
* const pinning = createSpecimen(
|
|
96
|
+
* { type: 'PRIMORDIA', species: 'Pleurotus ostreatus' },
|
|
97
|
+
* { onWarning: w => console.info(w.message) }
|
|
98
|
+
* );
|
|
99
|
+
*
|
|
100
|
+
* // Explicit creation timestamp (v1.3.0)
|
|
101
|
+
* const dated = createSpecimen({
|
|
102
|
+
* type: 'CULTURE',
|
|
103
|
+
* species: 'Pleurotus ostreatus',
|
|
104
|
+
* created: '2025-12-16T10:30:00Z',
|
|
105
|
+
* });
|
|
71
106
|
* ```
|
|
72
107
|
*/
|
|
73
|
-
function createSpecimen(input) {
|
|
108
|
+
function createSpecimen(input, options = {}) {
|
|
74
109
|
const id = (0, types_js_1.asSpecimenId)((0, cuid_js_1.createSpecimenId)());
|
|
75
110
|
const strain = expandStrain(input.strain);
|
|
111
|
+
// Resolve type alias to canonical WOLS type (e.g., 'LIQUID_CULTURE' -> 'CULTURE')
|
|
112
|
+
const resolved = (0, types_js_1.resolveTypeAndStage)(input.type, input.stage);
|
|
113
|
+
if (resolved === null) {
|
|
114
|
+
throw new Error(`Invalid specimen type: '${input.type}'. ` +
|
|
115
|
+
`Must be one of: CULTURE, SPAWN, SUBSTRATE, FRUITING, HARVEST ` +
|
|
116
|
+
`(or a registered alias).`);
|
|
117
|
+
}
|
|
118
|
+
let created;
|
|
119
|
+
if (input.created !== undefined) {
|
|
120
|
+
if (input.created instanceof Date) {
|
|
121
|
+
if (Number.isNaN(input.created.getTime())) {
|
|
122
|
+
throw new Error('Invalid created timestamp: Date is invalid. Must be ISO 8601.');
|
|
123
|
+
}
|
|
124
|
+
created = input.created.toISOString();
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
created = input.created;
|
|
128
|
+
}
|
|
129
|
+
if (typeof created !== 'string' || !(0, iso8601_js_1.isValidISO8601)(created)) {
|
|
130
|
+
throw new Error(`Invalid created timestamp: '${String(input.created)}'. Must be ISO 8601.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (resolved.primordia) {
|
|
134
|
+
const warning = primordiaWarning();
|
|
135
|
+
if (options.onWarning) {
|
|
136
|
+
options.onWarning(warning);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// eslint-disable-next-line no-console
|
|
140
|
+
console.warn(`[@wemush/wols] ${warning.message}. ${warning.suggestion ?? ''}`.trim());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
76
143
|
// Build specimen with required fields
|
|
77
144
|
const specimen = {
|
|
78
145
|
'@context': types_js_1.WOLS_CONTEXT,
|
|
79
146
|
'@type': 'Specimen',
|
|
80
147
|
id,
|
|
81
148
|
version: types_js_1.WOLS_VERSION,
|
|
82
|
-
type:
|
|
149
|
+
type: resolved.type,
|
|
83
150
|
species: input.species,
|
|
84
151
|
};
|
|
85
152
|
// Add optional fields only if defined
|
|
86
153
|
if (strain !== undefined) {
|
|
87
154
|
specimen.strain = strain;
|
|
88
155
|
}
|
|
89
|
-
if (
|
|
90
|
-
specimen.stage =
|
|
156
|
+
if (resolved.stage !== undefined) {
|
|
157
|
+
specimen.stage = resolved.stage;
|
|
158
|
+
}
|
|
159
|
+
if (created !== undefined) {
|
|
160
|
+
specimen.created = created;
|
|
91
161
|
}
|
|
92
162
|
if (input.batch !== undefined) {
|
|
93
163
|
specimen.batch = input.batch;
|
|
@@ -101,6 +171,9 @@ function createSpecimen(input) {
|
|
|
101
171
|
if (input.custom !== undefined) {
|
|
102
172
|
specimen.custom = input.custom;
|
|
103
173
|
}
|
|
174
|
+
if (input._meta !== undefined) {
|
|
175
|
+
specimen._meta = input._meta;
|
|
176
|
+
}
|
|
104
177
|
return specimen;
|
|
105
178
|
}
|
|
106
179
|
/**
|
|
@@ -124,21 +197,31 @@ function createSpecimen(input) {
|
|
|
124
197
|
* ```
|
|
125
198
|
*/
|
|
126
199
|
function serializeSpecimen(specimen) {
|
|
200
|
+
// WOLS v1.3.0: PRIMORDIA is never emitted as a type. A specimen object built
|
|
201
|
+
// by hand with type PRIMORDIA gets the same resolution as createSpecimen()
|
|
202
|
+
// (shared resolveTypeAndStage). Any other type is emitted as given.
|
|
203
|
+
let type = specimen.type;
|
|
204
|
+
let stage = specimen.stage;
|
|
205
|
+
const resolved = (0, types_js_1.resolveTypeAndStage)(type, stage);
|
|
206
|
+
if (resolved?.primordia) {
|
|
207
|
+
type = resolved.type;
|
|
208
|
+
stage = resolved.stage;
|
|
209
|
+
}
|
|
127
210
|
// Build ordered object with JSON-LD fields first
|
|
128
211
|
const ordered = {
|
|
129
212
|
'@context': specimen['@context'],
|
|
130
213
|
'@type': specimen['@type'],
|
|
131
214
|
id: specimen.id,
|
|
132
215
|
version: specimen.version,
|
|
133
|
-
type
|
|
216
|
+
type,
|
|
134
217
|
species: specimen.species,
|
|
135
218
|
};
|
|
136
219
|
// Add optional fields in order, only if defined
|
|
137
220
|
if (specimen.strain !== undefined) {
|
|
138
221
|
ordered['strain'] = specimen.strain;
|
|
139
222
|
}
|
|
140
|
-
if (
|
|
141
|
-
ordered['stage'] =
|
|
223
|
+
if (stage !== undefined) {
|
|
224
|
+
ordered['stage'] = stage;
|
|
142
225
|
}
|
|
143
226
|
if (specimen.created !== undefined) {
|
|
144
227
|
ordered['created'] = specimen.created;
|
|
@@ -158,6 +241,9 @@ function serializeSpecimen(specimen) {
|
|
|
158
241
|
if (specimen.signature !== undefined) {
|
|
159
242
|
ordered['signature'] = specimen.signature;
|
|
160
243
|
}
|
|
244
|
+
if (specimen._meta !== undefined) {
|
|
245
|
+
ordered['_meta'] = specimen._meta;
|
|
246
|
+
}
|
|
161
247
|
return JSON.stringify(ordered);
|
|
162
248
|
}
|
|
163
249
|
//# sourceMappingURL=specimen.js.map
|
package/dist/cjs/specimen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specimen.js","sourceRoot":"","sources":["../../src/specimen.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG
|
|
1
|
+
{"version":3,"file":"specimen.js","sourceRoot":"","sources":["../../src/specimen.ts"],"names":[],"mappings":"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"}
|