@jdeighan/coffee-utils 10.0.0 → 10.0.1

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "10.0.0",
4
+ "version": "10.0.1",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -83,37 +83,56 @@ export class SectionMap
83
83
  # a set name
84
84
  # undef (equivalent to being set to @SectionTree)
85
85
 
86
- getBlock: (desc=undef, hProcs={}) ->
86
+ getBlock: (desc=undef, hReplacers={}) ->
87
87
 
88
- debug "enter SectionMap.getBlock()", desc, hProcs
88
+ debug "enter SectionMap.getBlock()", desc, hReplacers
89
89
 
90
- if notdefined(desc)
90
+ # --- desc can only be a string or an array
91
+ # so, if it's a hash, then it's really the hReplacers
92
+ # and the real desc is undef
93
+
94
+ if isHash(desc)
95
+ debug "arg 1 is hReplacers, no desc"
96
+ assert isEmpty(hReplacers), "invalid parms"
97
+ hReplacers = desc
98
+ desc = @lSectionTree
99
+ else if notdefined(desc)
91
100
  desc = @lSectionTree
92
101
 
93
102
  if isArray(desc)
94
103
  lBlocks = []
95
104
  setName = undef
96
105
  for item in desc
97
- if isArray(item) || isSectionName(item)
98
- # --- arrayToBlock() will skip undef items
99
- # so, no need to check for undef block
100
- lBlocks.push @getBlock(item, hProcs)
106
+ subBlock = undef
107
+ if isArray(item)
108
+ subBlock = @getBlock(item, hReplacers)
109
+ else if isSectionName(item)
110
+ subBlock = @getBlock(item, hReplacers)
101
111
  else if isSetName(item)
102
112
  setName = item
103
113
  else if isString(item)
104
- lBlocks.push item # a literal string
114
+ subBlock = item # a literal string
105
115
  else
106
116
  croak "Bad item: #{OL(item)}"
117
+ if defined(subBlock)
118
+ lBlocks.push subBlock
107
119
  block = arrayToBlock(lBlocks)
120
+ if defined(setName)
121
+ if defined(proc = hReplacers[setName])
122
+ debug "REPLACE #{setName}"
123
+ block = proc(block)
124
+ else
125
+ debug "NO REPLACER for #{setName}"
108
126
  else if isSectionName(desc)
109
127
  block = @section(desc).getBlock()
110
- if defined(proc = hProcs[desc])
128
+ if defined(proc = hReplacers[desc])
129
+ debug "REPLACE #{desc}"
111
130
  block = proc(block)
131
+ else
132
+ debug "NO REPLACER for #{desc}"
112
133
  else if isSetName(desc)
113
134
  # --- pass array to getBlock()
114
- block = @getBlock(@hSets[desc], hProcs)
115
- if defined(proc = hProcs[desc])
116
- block = proc(block)
135
+ block = @getBlock(@hSets[desc], hReplacers)
117
136
  else
118
137
  croak "Bad 1st arg: #{OL(desc)}"
119
138
  debug "return from SectionMap.getBlock()", block
package/src/SectionMap.js CHANGED
@@ -114,10 +114,18 @@ export var SectionMap = class SectionMap {
114
114
  // a section name
115
115
  // a set name
116
116
  // undef (equivalent to being set to @SectionTree)
117
- getBlock(desc = undef, hProcs = {}) {
118
- var block, i, item, lBlocks, len, proc, setName;
119
- debug("enter SectionMap.getBlock()", desc, hProcs);
120
- if (notdefined(desc)) {
117
+ getBlock(desc = undef, hReplacers = {}) {
118
+ var block, i, item, lBlocks, len, proc, setName, subBlock;
119
+ debug("enter SectionMap.getBlock()", desc, hReplacers);
120
+ // --- desc can only be a string or an array
121
+ // so, if it's a hash, then it's really the hReplacers
122
+ // and the real desc is undef
123
+ if (isHash(desc)) {
124
+ debug("arg 1 is hReplacers, no desc");
125
+ assert(isEmpty(hReplacers), "invalid parms");
126
+ hReplacers = desc;
127
+ desc = this.lSectionTree;
128
+ } else if (notdefined(desc)) {
121
129
  desc = this.lSectionTree;
122
130
  }
123
131
  if (isArray(desc)) {
@@ -125,30 +133,42 @@ export var SectionMap = class SectionMap {
125
133
  setName = undef;
126
134
  for (i = 0, len = desc.length; i < len; i++) {
127
135
  item = desc[i];
128
- if (isArray(item) || isSectionName(item)) {
129
- // --- arrayToBlock() will skip undef items
130
- // so, no need to check for undef block
131
- lBlocks.push(this.getBlock(item, hProcs));
136
+ subBlock = undef;
137
+ if (isArray(item)) {
138
+ subBlock = this.getBlock(item, hReplacers);
139
+ } else if (isSectionName(item)) {
140
+ subBlock = this.getBlock(item, hReplacers);
132
141
  } else if (isSetName(item)) {
133
142
  setName = item;
134
143
  } else if (isString(item)) {
135
- lBlocks.push(item); // a literal string
144
+ subBlock = item; // a literal string
136
145
  } else {
137
146
  croak(`Bad item: ${OL(item)}`);
138
147
  }
148
+ if (defined(subBlock)) {
149
+ lBlocks.push(subBlock);
150
+ }
139
151
  }
140
152
  block = arrayToBlock(lBlocks);
153
+ if (defined(setName)) {
154
+ if (defined(proc = hReplacers[setName])) {
155
+ debug(`REPLACE ${setName}`);
156
+ block = proc(block);
157
+ } else {
158
+ debug(`NO REPLACER for ${setName}`);
159
+ }
160
+ }
141
161
  } else if (isSectionName(desc)) {
142
162
  block = this.section(desc).getBlock();
143
- if (defined(proc = hProcs[desc])) {
163
+ if (defined(proc = hReplacers[desc])) {
164
+ debug(`REPLACE ${desc}`);
144
165
  block = proc(block);
166
+ } else {
167
+ debug(`NO REPLACER for ${desc}`);
145
168
  }
146
169
  } else if (isSetName(desc)) {
147
170
  // --- pass array to getBlock()
148
- block = this.getBlock(this.hSets[desc], hProcs);
149
- if (defined(proc = hProcs[desc])) {
150
- block = proc(block);
151
- }
171
+ block = this.getBlock(this.hSets[desc], hReplacers);
152
172
  } else {
153
173
  croak(`Bad 1st arg: ${OL(desc)}`);
154
174
  }