@jdeighan/coffee-utils 13.0.11 → 13.0.12

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "13.0.11",
4
+ "version": "13.0.12",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -52,8 +52,6 @@
52
52
  "dependencies": {
53
53
  "@jdeighan/base-utils": "^2.0.8",
54
54
  "cross-env": "^7.0.3",
55
- "immer": "^9.0.16",
56
- "js-yaml": "^4.1.0",
57
55
  "n-readlines": "^1.0.1",
58
56
  "readline-sync": "^1.4.10",
59
57
  "svelte": "^3.55.0"
@@ -4,13 +4,12 @@ import pathlib from 'path'
4
4
  import {writable, readable, get} from 'svelte/store'
5
5
 
6
6
  import {assert, croak} from '@jdeighan/base-utils'
7
- import {undef, pass} from '@jdeighan/coffee-utils'
7
+ import {fromTAML} from '@jdeighan/base-utils/taml'
8
+ import {undef, pass, range} from '@jdeighan/coffee-utils'
8
9
  import {localStore} from '@jdeighan/coffee-utils/browser'
9
10
  import {
10
11
  withExt, slurp, barf, newerDestFileExists,
11
12
  } from '@jdeighan/coffee-utils/fs'
12
- import {fromTAML} from '@jdeighan/coffee-utils/taml'
13
- import {createDraft, finishDraft, produce} from 'immer'
14
13
 
15
14
  # ---------------------------------------------------------------------------
16
15
 
@@ -59,58 +58,51 @@ export class BaseDataStore
59
58
 
60
59
  # ---------------------------------------------------------------------------
61
60
 
62
- export class ImmerDataStore extends BaseDataStore
63
-
64
- constructor: () ->
65
- super [] # initialize with an empty array
66
-
67
- getNewState: () ->
68
-
69
- return produce state, draft =>
70
- @addGift draft, description, image
71
- return
72
-
73
- addGift: (draft, description, image) ->
74
- draft.push {
75
- id: 1
76
- description
77
- image
78
- }
79
-
80
- # ---------------------------------------------------------------------------
81
-
82
61
  export class ToDoDataStore
83
- # --- implemented with immer
62
+ # --- implement without using svelte's readable or writable
84
63
 
85
64
  constructor: () ->
86
65
  @lToDos = []
87
- @lSubscribers = []
66
+ @lSubscribers = [] # --- array of callback functions
88
67
 
89
- subscribe: (func) ->
90
- func(@lToDos)
91
- @lSubscribers.push func
68
+ subscribe: (cbFunc) ->
69
+ cbFunc(@lToDos)
70
+ @lSubscribers.push cbFunc
92
71
  return () ->
93
- index = @lSubscribers.indexOf func
72
+ index = @lSubscribers.indexOf cbFunc
94
73
  @lSubscribers.splice index, 1
95
74
 
96
75
  alertSubscribers: () ->
97
- for func in @lSubscribers
98
- func(@lToDos)
76
+ for cbFunc in @lSubscribers
77
+ cbFunc(@lToDos)
99
78
  return
100
79
 
101
- set: (value) ->
102
- # --- Set new value
103
- @alertSubscribers()
80
+ find: (name) ->
81
+ # --- returns index
82
+ for index in range(@lToDos.length)
83
+ if (@lToDos[index].text == name)
84
+ return index
85
+ return undef
104
86
 
105
- update: (func) ->
106
- # --- Update value
87
+ clear: () ->
88
+ # --- Set new value
89
+ @lToDos = []
107
90
  @alertSubscribers()
91
+ return
108
92
 
109
93
  add: (name) ->
94
+ if defined(@find(name))
95
+ croak "Attempt to add duplicate #{name} todo"
110
96
  @lToDos.push {
111
97
  text: name
112
98
  done: false
113
99
  }
100
+ @alertSubscribers()
101
+ return
102
+
103
+ remove: (name) ->
104
+ index = @find(name)
105
+ @lToDos.splice index, 1
114
106
  return
115
107
 
116
108
  # ---------------------------------------------------------------------------
package/src/DataStores.js CHANGED
@@ -13,9 +13,14 @@ import {
13
13
  croak
14
14
  } from '@jdeighan/base-utils';
15
15
 
16
+ import {
17
+ fromTAML
18
+ } from '@jdeighan/base-utils/taml';
19
+
16
20
  import {
17
21
  undef,
18
- pass
22
+ pass,
23
+ range
19
24
  } from '@jdeighan/coffee-utils';
20
25
 
21
26
  import {
@@ -29,16 +34,6 @@ import {
29
34
  newerDestFileExists
30
35
  } from '@jdeighan/coffee-utils/fs';
31
36
 
32
- import {
33
- fromTAML
34
- } from '@jdeighan/coffee-utils/taml';
35
-
36
- import {
37
- createDraft,
38
- finishDraft,
39
- produce
40
- } from 'immer';
41
-
42
37
  // ---------------------------------------------------------------------------
43
38
  export var WritableDataStore = class WritableDataStore {
44
39
  constructor(value = undef) {
@@ -97,70 +92,67 @@ export var BaseDataStore = class BaseDataStore {
97
92
 
98
93
  };
99
94
 
100
- // ---------------------------------------------------------------------------
101
- export var ImmerDataStore = class ImmerDataStore extends BaseDataStore {
102
- constructor() {
103
- super([]); // initialize with an empty array
104
- }
105
-
106
- getNewState() {
107
- return produce(state, draft(() => {
108
- return this.addGift(draft, description, image);
109
- }));
110
- }
111
-
112
- addGift(draft, description, image) {
113
- return draft.push({
114
- id: 1,
115
- description,
116
- image
117
- });
118
- }
119
-
120
- };
121
-
122
95
  // ---------------------------------------------------------------------------
123
96
  export var ToDoDataStore = class ToDoDataStore {
124
- // --- implemented with immer
97
+ // --- implement without using svelte's readable or writable
125
98
  constructor() {
126
99
  this.lToDos = [];
127
- this.lSubscribers = [];
100
+ this.lSubscribers = []; // --- array of callback functions
128
101
  }
129
102
 
130
- subscribe(func) {
131
- func(this.lToDos);
132
- this.lSubscribers.push(func);
103
+ subscribe(cbFunc) {
104
+ cbFunc(this.lToDos);
105
+ this.lSubscribers.push(cbFunc);
133
106
  return function() {
134
107
  var index;
135
- index = this.lSubscribers.indexOf(func);
108
+ index = this.lSubscribers.indexOf(cbFunc);
136
109
  return this.lSubscribers.splice(index, 1);
137
110
  };
138
111
  }
139
112
 
140
113
  alertSubscribers() {
141
- var func, i, len, ref;
114
+ var cbFunc, i, len, ref;
142
115
  ref = this.lSubscribers;
143
116
  for (i = 0, len = ref.length; i < len; i++) {
144
- func = ref[i];
145
- func(this.lToDos);
117
+ cbFunc = ref[i];
118
+ cbFunc(this.lToDos);
146
119
  }
147
120
  }
148
121
 
149
- set(value) {
150
- // --- Set new value
151
- return this.alertSubscribers();
122
+ find(name) {
123
+ var i, index, len, ref;
124
+ ref = range(this.lToDos.length);
125
+ // --- returns index
126
+ for (i = 0, len = ref.length; i < len; i++) {
127
+ index = ref[i];
128
+ if (this.lToDos[index].text === name) {
129
+ return index;
130
+ }
131
+ }
132
+ return undef;
152
133
  }
153
134
 
154
- update(func) {
155
- // --- Update value
156
- return this.alertSubscribers();
135
+ clear() {
136
+ // --- Set new value
137
+ this.lToDos = [];
138
+ this.alertSubscribers();
157
139
  }
158
140
 
159
141
  add(name) {
142
+ if (defined(this.find(name))) {
143
+ croak(`Attempt to add duplicate ${name} todo`);
144
+ }
160
145
  this.lToDos.push({
161
146
  text: name,
162
147
  done: false
163
148
  });
149
+ this.alertSubscribers();
150
+ }
151
+
152
+ remove(name) {
153
+ var index;
154
+ index = this.find(name);
155
+ this.lToDos.splice(index, 1);
164
156
  }
165
157
 
166
158
  };
@@ -1,61 +0,0 @@
1
- # GiftSet.coffee
2
-
3
- import {produce, enableMapSet} from 'immer'
4
- import {assert, croak, LOG, LOGVALUE} from '@jdeighan/base-utils'
5
- import {
6
- dbgEnter, dbgReturn, dbg,
7
- } from '@jdeighan/base-utils/debug'
8
- import {
9
- undef, defined, notdefined, OL,
10
- isString, isNonEmptyString, isArray, isHash, isArrayOfStrings,
11
- isEmpty, nonEmpty,
12
- } from '@jdeighan/coffee-utils'
13
-
14
- enableMapSet()
15
-
16
- # ---------------------------------------------------------------------------
17
-
18
- export LOGMAP = (label, map) ->
19
-
20
- lLines = ["MAP #{label}:"]
21
- for [key, value] from map.entries()
22
- lLines.push " #{OL(key)}: #{OL(value)}"
23
- LOG lLines.join("\n")
24
- LOG()
25
- return
26
-
27
- # ---------------------------------------------------------------------------
28
-
29
- export addGift = produce (draft, giftName, hData={}) ->
30
-
31
- assert (draft instanceof Map), "draft is not a Map"
32
- if draft.get giftName
33
- throw new Error("Gift #{giftName} already exists")
34
- hValue = {hData...}
35
- hValue.name = giftName
36
- draft.set giftName, hValue
37
- return
38
-
39
- # ---------------------------------------------------------------------------
40
-
41
- export reserveGift = produce (draft, giftName, user) ->
42
-
43
- assert (draft instanceof Map), "draft is not a Map"
44
- gift = draft.get giftName
45
- assert gift?, "No such gift: #{giftName}"
46
- gift.reservedBy = user
47
- return
48
-
49
- # ---------------------------------------------------------------------------
50
-
51
- export cancelReservation = produce (draft, giftName) ->
52
-
53
- assert (draft instanceof Map), "draft is not a Map"
54
- gift = draft.get giftName
55
- assert defined(gift), "No such gift: #{giftName}"
56
- delete gift.reservedBy
57
- return
58
-
59
- # ---------------------------------------------------------------------------
60
-
61
-
package/src/GiftSet.js DELETED
@@ -1,80 +0,0 @@
1
- // Generated by CoffeeScript 2.7.0
2
- // GiftSet.coffee
3
- import {
4
- produce,
5
- enableMapSet
6
- } from 'immer';
7
-
8
- import {
9
- assert,
10
- croak,
11
- LOG,
12
- LOGVALUE
13
- } from '@jdeighan/base-utils';
14
-
15
- import {
16
- dbgEnter,
17
- dbgReturn,
18
- dbg
19
- } from '@jdeighan/base-utils/debug';
20
-
21
- import {
22
- undef,
23
- defined,
24
- notdefined,
25
- OL,
26
- isString,
27
- isNonEmptyString,
28
- isArray,
29
- isHash,
30
- isArrayOfStrings,
31
- isEmpty,
32
- nonEmpty
33
- } from '@jdeighan/coffee-utils';
34
-
35
- enableMapSet();
36
-
37
- // ---------------------------------------------------------------------------
38
- export var LOGMAP = function(label, map) {
39
- var key, lLines, ref, value, x;
40
- lLines = [`MAP ${label}:`];
41
- ref = map.entries();
42
- for (x of ref) {
43
- [key, value] = x;
44
- lLines.push(` ${OL(key)}: ${OL(value)}`);
45
- }
46
- LOG(lLines.join("\n"));
47
- LOG();
48
- };
49
-
50
- // ---------------------------------------------------------------------------
51
- export var addGift = produce(function(draft, giftName, hData = {}) {
52
- var hValue;
53
- assert(draft instanceof Map, "draft is not a Map");
54
- if (draft.get(giftName)) {
55
- throw new Error(`Gift ${giftName} already exists`);
56
- }
57
- hValue = {...hData};
58
- hValue.name = giftName;
59
- draft.set(giftName, hValue);
60
- });
61
-
62
- // ---------------------------------------------------------------------------
63
- export var reserveGift = produce(function(draft, giftName, user) {
64
- var gift;
65
- assert(draft instanceof Map, "draft is not a Map");
66
- gift = draft.get(giftName);
67
- assert(gift != null, `No such gift: ${giftName}`);
68
- gift.reservedBy = user;
69
- });
70
-
71
- // ---------------------------------------------------------------------------
72
- export var cancelReservation = produce(function(draft, giftName) {
73
- var gift;
74
- assert(draft instanceof Map, "draft is not a Map");
75
- gift = draft.get(giftName);
76
- assert(defined(gift), `No such gift: ${giftName}`);
77
- delete gift.reservedBy;
78
- });
79
-
80
- // ---------------------------------------------------------------------------
package/src/taml.coffee DELETED
@@ -1,16 +0,0 @@
1
- # taml.coffee
2
-
3
- import yaml from 'js-yaml'
4
-
5
- import {assert, croak, isTAML, fromTAML, toTAML} from '@jdeighan/base-utils'
6
- import {
7
- undef, defined, notdefined, OL, chomp, escapeStr,
8
- isString, isObject, isEmpty,
9
- } from '@jdeighan/coffee-utils'
10
- import {splitLine} from '@jdeighan/coffee-utils/indent'
11
- import {
12
- firstLine, toArray, toBlock,
13
- } from '@jdeighan/coffee-utils/block'
14
- import {slurpTAML} from '@jdeighan/coffee-utils/fs'
15
-
16
- export {isTAML, fromTAML, toTAML, slurpTAML}
package/src/taml.js DELETED
@@ -1,44 +0,0 @@
1
- // Generated by CoffeeScript 2.7.0
2
- // taml.coffee
3
- import yaml from 'js-yaml';
4
-
5
- import {
6
- assert,
7
- croak,
8
- isTAML,
9
- fromTAML,
10
- toTAML
11
- } from '@jdeighan/base-utils';
12
-
13
- import {
14
- undef,
15
- defined,
16
- notdefined,
17
- OL,
18
- chomp,
19
- escapeStr,
20
- isString,
21
- isObject,
22
- isEmpty
23
- } from '@jdeighan/coffee-utils';
24
-
25
- import {
26
- splitLine
27
- } from '@jdeighan/coffee-utils/indent';
28
-
29
- import {
30
- firstLine,
31
- toArray,
32
- toBlock
33
- } from '@jdeighan/coffee-utils/block';
34
-
35
- import {
36
- slurpTAML
37
- } from '@jdeighan/coffee-utils/fs';
38
-
39
- export {
40
- isTAML,
41
- fromTAML,
42
- toTAML,
43
- slurpTAML
44
- };